-static void bc_ilists(const t_commrec *cr, InteractionLists *ilist)
-{
- int ftype;
-
- /* Here we only communicate the non-zero length ilists */
- if (MASTER(cr))
- {
- for (ftype = 0; ftype < F_NRE; ftype++)
- {
- if ((*ilist)[ftype].size() > 0)
- {
- block_bc(cr, ftype);
- int nr = (*ilist)[ftype].size();
- block_bc(cr, nr);
- nblock_bc(cr, nr, (*ilist)[ftype].iatoms.data());
- }
- }
- ftype = -1;
- block_bc(cr, ftype);
- }
- else
- {
- for (ftype = 0; ftype < F_NRE; ftype++)
- {
- (*ilist)[ftype].iatoms.clear();
- }
- do
- {
- block_bc(cr, ftype);
- if (ftype >= 0)
- {
- int nr;
- block_bc(cr, nr);
- (*ilist)[ftype].iatoms.resize(nr);
- nblock_bc(cr, nr, (*ilist)[ftype].iatoms.data());
- }
- }
- while (ftype >= 0);
- }
-
- if (debug)
- {
- fprintf(debug, "after bc_ilists\n");
- }
-}
-
-static void bc_cmap(const t_commrec *cr, gmx_cmap_t *cmap_grid)
-{
- int ngrid = cmap_grid->cmapdata.size();
- block_bc(cr, ngrid);
- block_bc(cr, cmap_grid->grid_spacing);
-
- int nelem = cmap_grid->grid_spacing * cmap_grid->grid_spacing;
-
- if (ngrid > 0)
- {
- if (!MASTER(cr))
- {
- cmap_grid->cmapdata.resize(ngrid);
- }
-
- for (int i = 0; i < ngrid; i++)
- {
- nblock_abc(cr, 4*nelem, &cmap_grid->cmapdata[i].cmap);
- }
- }
-}
-
-static void bc_ffparams(const t_commrec *cr, gmx_ffparams_t *ffp)
-{
- int numTypes = ffp->numTypes();
- block_bc(cr, numTypes);
- block_bc(cr, ffp->atnr);
- nblock_abc(cr, numTypes, &ffp->functype);
- nblock_abc(cr, numTypes, &ffp->iparams);
- block_bc(cr, ffp->reppow);
- block_bc(cr, ffp->fudgeQQ);
- bc_cmap(cr, &ffp->cmap_grid);
-}
-
-static void bc_grpopts(const t_commrec *cr, t_grpopts *g)
-{
- int i, n;
-
- block_bc(cr, g->ngtc);
- block_bc(cr, g->ngacc);
- block_bc(cr, g->ngfrz);
- block_bc(cr, g->ngener);
- snew_bc(cr, g->nrdf, g->ngtc);
- snew_bc(cr, g->tau_t, g->ngtc);
- snew_bc(cr, g->ref_t, g->ngtc);
- snew_bc(cr, g->acc, g->ngacc);
- snew_bc(cr, g->nFreeze, g->ngfrz);
- snew_bc(cr, g->egp_flags, g->ngener*g->ngener);
-
- nblock_bc(cr, g->ngtc, g->nrdf);
- nblock_bc(cr, g->ngtc, g->tau_t);
- nblock_bc(cr, g->ngtc, g->ref_t);
- nblock_bc(cr, g->ngacc, g->acc);
- nblock_bc(cr, g->ngfrz, g->nFreeze);
- nblock_bc(cr, g->ngener*g->ngener, g->egp_flags);
- snew_bc(cr, g->annealing, g->ngtc);
- snew_bc(cr, g->anneal_npoints, g->ngtc);
- snew_bc(cr, g->anneal_time, g->ngtc);
- snew_bc(cr, g->anneal_temp, g->ngtc);
- nblock_bc(cr, g->ngtc, g->annealing);
- nblock_bc(cr, g->ngtc, g->anneal_npoints);
- for (i = 0; (i < g->ngtc); i++)
- {
- n = g->anneal_npoints[i];
- if (n > 0)
- {
- snew_bc(cr, g->anneal_time[i], n);
- snew_bc(cr, g->anneal_temp[i], n);
- nblock_bc(cr, n, g->anneal_time[i]);
- nblock_bc(cr, n, g->anneal_temp[i]);
- }
- }
-
- /* QMMM stuff, see inputrec */
- block_bc(cr, g->ngQM);
- snew_bc(cr, g->QMmethod, g->ngQM);
- snew_bc(cr, g->QMbasis, g->ngQM);
- snew_bc(cr, g->QMcharge, g->ngQM);
- snew_bc(cr, g->QMmult, g->ngQM);
- snew_bc(cr, g->bSH, g->ngQM);
- snew_bc(cr, g->CASorbitals, g->ngQM);
- snew_bc(cr, g->CASelectrons, g->ngQM);
- snew_bc(cr, g->SAon, g->ngQM);
- snew_bc(cr, g->SAoff, g->ngQM);
- snew_bc(cr, g->SAsteps, g->ngQM);
-
- if (g->ngQM)
- {
- nblock_bc(cr, g->ngQM, g->QMmethod);
- nblock_bc(cr, g->ngQM, g->QMbasis);
- nblock_bc(cr, g->ngQM, g->QMcharge);
- nblock_bc(cr, g->ngQM, g->QMmult);
- nblock_bc(cr, g->ngQM, g->bSH);
- nblock_bc(cr, g->ngQM, g->CASorbitals);
- nblock_bc(cr, g->ngQM, g->CASelectrons);
- nblock_bc(cr, g->ngQM, g->SAon);
- nblock_bc(cr, g->ngQM, g->SAoff);
- nblock_bc(cr, g->ngQM, g->SAsteps);
- /* end of QMMM stuff */
- }
-}
-
-static void bc_awhBias(const t_commrec *cr, gmx::AwhBiasParams *awhBiasParams)
-{
- block_bc(cr, *awhBiasParams);
-
- snew_bc(cr, awhBiasParams->dimParams, awhBiasParams->ndim);
- nblock_bc(cr, awhBiasParams->ndim, awhBiasParams->dimParams);
-}
-
-static void bc_awh(const t_commrec *cr, gmx::AwhParams *awhParams)
-{
- int k;
-
- block_bc(cr, *awhParams);
- snew_bc(cr, awhParams->awhBiasParams, awhParams->numBias);
- for (k = 0; k < awhParams->numBias; k++)
- {
- bc_awhBias(cr, &awhParams->awhBiasParams[k]);
- }
-}
-
-static void bc_pull_group(const t_commrec *cr, t_pull_group *pgrp)
-{
- block_bc(cr, *pgrp);
- if (pgrp->nat > 0)
- {
- snew_bc(cr, pgrp->ind, pgrp->nat);
- nblock_bc(cr, pgrp->nat, pgrp->ind);
- }
- if (pgrp->nweight > 0)
- {
- snew_bc(cr, pgrp->weight, pgrp->nweight);
- nblock_bc(cr, pgrp->nweight, pgrp->weight);
- }
-}
-
-static void bc_pull(const t_commrec *cr, pull_params_t *pull)
-{
- int g;
-
- block_bc(cr, *pull);
- snew_bc(cr, pull->group, pull->ngroup);
- for (g = 0; g < pull->ngroup; g++)
- {
- bc_pull_group(cr, &pull->group[g]);
- }
- snew_bc(cr, pull->coord, pull->ncoord);
- nblock_bc(cr, pull->ncoord, pull->coord);
- for (int c = 0; c < pull->ncoord; c++)
- {
- if (!MASTER(cr))
- {
- pull->coord[c].externalPotentialProvider = nullptr;
- }
- if (pull->coord[c].eType == epullEXTERNAL)
- {
- bc_cstring(cr, &pull->coord[c].externalPotentialProvider);
- }
- }
-}
-
-static void bc_rotgrp(const t_commrec *cr, t_rotgrp *rotg)
-{
- block_bc(cr, *rotg);
- if (rotg->nat > 0)
- {
- snew_bc(cr, rotg->ind, rotg->nat);
- nblock_bc(cr, rotg->nat, rotg->ind);
- snew_bc(cr, rotg->x_ref, rotg->nat);
- nblock_bc(cr, rotg->nat, rotg->x_ref);
- }
-}
-
-static void bc_rot(const t_commrec *cr, t_rot *rot)
-{
- int g;
-
- block_bc(cr, *rot);
- snew_bc(cr, rot->grp, rot->ngrp);
- for (g = 0; g < rot->ngrp; g++)
- {
- bc_rotgrp(cr, &rot->grp[g]);
- }
-}
-
-static void bc_imd(const t_commrec *cr, t_IMD *imd)
-{
- block_bc(cr, *imd);
- snew_bc(cr, imd->ind, imd->nat);
- nblock_bc(cr, imd->nat, imd->ind);
-}
-
-static void bc_fepvals(const t_commrec *cr, t_lambda *fep)
-{
- int i;
-
- block_bc(cr, fep->nstdhdl);
- block_bc(cr, fep->init_lambda);
- block_bc(cr, fep->init_fep_state);
- block_bc(cr, fep->delta_lambda);
- block_bc(cr, fep->edHdLPrintEnergy);
- block_bc(cr, fep->n_lambda);
- if (fep->n_lambda > 0)
- {
- snew_bc(cr, fep->all_lambda, efptNR);
- nblock_bc(cr, efptNR, fep->all_lambda);
- for (i = 0; i < efptNR; i++)
- {
- snew_bc(cr, fep->all_lambda[i], fep->n_lambda);
- nblock_bc(cr, fep->n_lambda, fep->all_lambda[i]);
- }
- }
- block_bc(cr, fep->sc_alpha);
- block_bc(cr, fep->sc_power);
- block_bc(cr, fep->sc_r_power);
- block_bc(cr, fep->sc_sigma);
- block_bc(cr, fep->sc_sigma_min);
- block_bc(cr, fep->bScCoul);
- nblock_bc(cr, efptNR, &(fep->separate_dvdl[0]));
- block_bc(cr, fep->dhdl_derivatives);
- block_bc(cr, fep->dh_hist_size);
- block_bc(cr, fep->dh_hist_spacing);
- if (debug)
- {
- fprintf(debug, "after bc_fepvals\n");
- }
-}
-
-static void bc_expandedvals(const t_commrec *cr, t_expanded *expand, int n_lambda)
-{
- block_bc(cr, expand->nstexpanded);
- block_bc(cr, expand->elamstats);
- block_bc(cr, expand->elmcmove);
- block_bc(cr, expand->elmceq);
- block_bc(cr, expand->equil_n_at_lam);
- block_bc(cr, expand->equil_wl_delta);
- block_bc(cr, expand->equil_ratio);
- block_bc(cr, expand->equil_steps);
- block_bc(cr, expand->equil_samples);
- block_bc(cr, expand->lmc_seed);
- block_bc(cr, expand->minvar);
- block_bc(cr, expand->minvar_const);
- block_bc(cr, expand->c_range);
- block_bc(cr, expand->bSymmetrizedTMatrix);
- block_bc(cr, expand->nstTij);
- block_bc(cr, expand->lmc_repeats);
- block_bc(cr, expand->lmc_forced_nstart);
- block_bc(cr, expand->gibbsdeltalam);
- block_bc(cr, expand->wl_scale);
- block_bc(cr, expand->wl_ratio);
- block_bc(cr, expand->init_wl_delta);
- block_bc(cr, expand->bInit_weights);
- snew_bc(cr, expand->init_lambda_weights, n_lambda);
- nblock_bc(cr, n_lambda, expand->init_lambda_weights);
- block_bc(cr, expand->mc_temp);
- if (debug)
- {
- fprintf(debug, "after bc_expandedvals\n");
- }
-}
-
-static void bc_simtempvals(const t_commrec *cr, t_simtemp *simtemp, int n_lambda)
-{
- block_bc(cr, simtemp->simtemp_low);
- block_bc(cr, simtemp->simtemp_high);
- block_bc(cr, simtemp->eSimTempScale);
- snew_bc(cr, simtemp->temperatures, n_lambda);
- nblock_bc(cr, n_lambda, simtemp->temperatures);
- if (debug)
- {
- fprintf(debug, "after bc_simtempvals\n");
- }
-}
-
-
-static void bc_swapions(const t_commrec *cr, t_swapcoords *swap)
-{
- block_bc(cr, *swap);
-
- /* Broadcast atom indices for split groups, solvent group, and for all user-defined swap groups */
- snew_bc(cr, swap->grp, swap->ngrp);
- for (int i = 0; i < swap->ngrp; i++)
- {
- t_swapGroup *g = &swap->grp[i];
-
- block_bc(cr, *g);
- snew_bc(cr, g->ind, g->nat);
- nblock_bc(cr, g->nat, g->ind);
-
- int len = 0;
- if (MASTER(cr))
- {
- len = strlen(g->molname);
- }
- block_bc(cr, len);
- snew_bc(cr, g->molname, len);
- nblock_bc(cr, len, g->molname);
- }
-}
-
-
-static void bc_inputrec(const t_commrec *cr, t_inputrec *inputrec)