original_code:
void zero_com_vx(CLASS *class)
  {
  int MPI_INT = 1;
  int MPI_DOUBLE = 1;
  int MPI_CHAR = 1;
  int MPI_MAX = 1;
  int MPI_SUM = 1;
  int MPI_ANY_TAG = 1;
  int MPI_ANY_SOURCE = 1;
  int *MPI_BOTTOM = {0};
  int i,ip;
  double vxcm,vycm,vzcm,mass_tot;
  double mass_tot_temp,vxcm_temp,vycm_temp,vzcm_temp;
  int pi_beads = class->clatoms_info.pi_beads;
  int natm_tot = class->clatoms_info.natm_tot;
  int myatm_start = class->clatoms_info.myatm_start;
  int myatm_end = class->clatoms_info.myatm_end;
  int np_forc = class->class_comm_forc_pkg.num_proc;
  int comm_forc = class->class_comm_forc_pkg.comm;
  double *mass = class->clatoms_info.mass;
  double *vx = class->clatoms_pos[1].vx;
  double *vy = class->clatoms_pos[1].vy;
  double *vz = class->clatoms_pos[1].vz;
  int *ighost_flag = class->atommaps.ighost_flag;
  if(pi_beads>1){mass = class->clatoms_pos[1].mass;}
  mass_tot = 0.0;
  vxcm = 0.0;
  vycm = 0.0;
  vzcm = 0.0;
  for(i=myatm_start;i<=myatm_end;i++){
    if (ighost_flag[i]==0) {
      vxcm += vx[i]*mass[i];
      vycm += vy[i]*mass[i];
      vzcm += vz[i]*mass[i];
      mass_tot += mass[i];
    }
  }
  if(np_forc > 1){
    vxcm_temp = vxcm;
    vycm_temp = vycm;
    vzcm_temp = vzcm;
    mass_tot_temp = mass_tot;
    Allreduce(&(vxcm_temp),&(vxcm),1,MPI_DOUBLE,MPI_SUM,0,comm_forc);
    Allreduce(&(vycm_temp),&(vycm),1,MPI_DOUBLE,MPI_SUM,0,comm_forc);
    Allreduce(&(vzcm_temp),&(vzcm),1,MPI_DOUBLE,MPI_SUM,0,comm_forc);
    Allreduce(&(mass_tot_temp),&(mass_tot),1,MPI_DOUBLE,MPI_SUM,0,comm_forc);
  }
  vxcm /= mass_tot;
  vycm /= mass_tot;
  vzcm /= mass_tot;
  for(i=myatm_start;i<=myatm_end;i++){
    if (ighost_flag[i]==0) {
      vx[i] -= vxcm;
      vy[i] -= vycm;
      vz[i] -= vzcm;
    }
  }
    }

canonical_original_code:
void zero_com_vx(struct class *class)
  {
  int MPI_INT = 1;
  int MPI_DOUBLE = 1;
  int MPI_CHAR = 1;
  int MPI_MAX = 1;
  int MPI_SUM = 1;
  int MPI_ANY_TAG = 1;
  int MPI_ANY_SOURCE = 1;
  int *MPI_BOTTOM = {0};
  int i; int ip;
  double vxcm; double vycm; double vzcm; double mass_tot;
  double mass_tot_temp; double vxcm_temp; double vycm_temp; double vzcm_temp;
  int pi_beads = class->clatoms_info.pi_beads;
  int natm_tot = class->clatoms_info.natm_tot;
  int myatm_start = class->clatoms_info.myatm_start;
  int myatm_end = class->clatoms_info.myatm_end;
  int np_forc = class->class_comm_forc_pkg.num_proc;
  int comm_forc = class->class_comm_forc_pkg.comm;
  double *mass = class->clatoms_info.mass;
  double *vx = class->clatoms_pos[1].vx;
  double *vy = class->clatoms_pos[1].vy;
  double *vz = class->clatoms_pos[1].vz;
  int *ighost_flag = class->atommaps.ighost_flag;
  if(pi_beads>1){mass = class->clatoms_pos[1].mass;}
  mass_tot = 0.0;
  vxcm = 0.0;
  vycm = 0.0;
  vzcm = 0.0;
  for(i=myatm_start;i<=myatm_end;i++){
    if (ighost_flag[i]==0) {
      vxcm += vx[i]*mass[i];
      vycm += vy[i]*mass[i];
      vzcm += vz[i]*mass[i];
      mass_tot += mass[i];
    }
  }
  if(np_forc > 1){
    vxcm_temp = vxcm;
    vycm_temp = vycm;
    vzcm_temp = vzcm;
    mass_tot_temp = mass_tot;
    Allreduce(&(vxcm_temp),&(vxcm),1,MPI_DOUBLE,MPI_SUM,0,comm_forc);
    Allreduce(&(vycm_temp),&(vycm),1,MPI_DOUBLE,MPI_SUM,0,comm_forc);
    Allreduce(&(vzcm_temp),&(vzcm),1,MPI_DOUBLE,MPI_SUM,0,comm_forc);
    Allreduce(&(mass_tot_temp),&(mass_tot),1,MPI_DOUBLE,MPI_SUM,0,comm_forc);
  }
  vxcm /= mass_tot;
  vycm /= mass_tot;
  vzcm /= mass_tot;
  for(i=myatm_start;i<=myatm_end;i++){
    if (ighost_flag[i]==0) {
      vx[i] -= vxcm;
      vy[i] -= vycm;
      vz[i] -= vzcm;
    }
  }
    }

variable_types: struct class { struct clatoms_info { int natm_tot; int pi_beads; int pi_beads_proc; int pi_beads_proc_st; int pi_beads_proc_end; int nfree; int nfree_pimd; int nchrg; int pi_beads_full_ter; int pi_beads_res_ter; int pi_beads_full_tra; int pi_beads_res_tra; int cg_reset_flag; int natm_mall; int nchrg_mall; int hess_calc; int natm_proc; int N_H2; int i_H2_start; int nab_initio; int myatm_start; double gamma_adb; double wght_pimd; double pi_temperature; double pi_beads_full_ter_wght; double pi_beads_res_ter_wght; double pi_beads_full_tra_wght; double pi_beads_res_tra_wght; double rcut_spread; double mass_sc_fact; int *ip_lab; int *ichrg; int *cp_vlnc_up; int *cp_atm_flag; double *mass; double *q; double *alp_pol; double *b_neut; double *roll_sc; double *text_atm; double *text_mol; double *xold; double *prekf; double *xmod; double alp_ewd; } clatoms_info; struct clatoms_tran { int pi_beads_proc; int pi_atm_proc; int pi_atm_proc_use; int pi_proc_rem; int nwork; int *sendcounts; int *senddspls; int *ifax; double *rat1_stag; double *path_eig; double *work; double *work3; double *x_trans; double *x_temp; double *xt_temp; } clatoms_tran; struct clatoms_pos { double *mass; double *x; double *vx; double *fx; double *fxt; double *fxm; double *hess_xx; } *clatoms_pos; struct ghost_atoms { int nghost_tot; int natm_comp_max; int nghost_mall; int nghost_old; int ncomp_mall; int ncomp_old; int *ighost_map; int *natm_comp; int **iatm_comp; double **coef; } ghost_atoms; struct atommaps { int nmol_typ; int nres_typ; int natm_typ; int nfreeze; int nfreeze_mall; int natm_typ_mall; int nres_typ_max; int nres_max; int nres_tot; int nres_sum; int pimd_freez_typ; char (*atm_typ)[50]; char (*res_typ)[50]; char (*mol_typ)[50]; int *nmol_jmol_typ; int *nres_1mol_jmol_typ; int *jatm_jmol_typ_strt; int *jres_jmol_typ_strt; int *ires_typ_jres_jmol_typ; int *jatm_jres_1mol_jmol_typ_strt; int *natm_1mol_jmol_typ; int *natm_jres_jmol_typ; int *nfree_1mol_jmol_typ; int *nfree_jres_jmol_typ; int *icons_jmol_typ; int *icons_jres_jmol_typ; int *natm_jmol_typ; int *iatm_mol_typ; int *iatm_res_typ; int *iatm_atm_typ; int *iatm_atm_typ_nl; int *iatm_atm_typ_nl_rev; int *imap_atm_typ_nl; int *imap_atm_typ_nl_gh; int *iatm_mol_num; int *iatm_proc_num; int *iatm_res_num; int *ighost_flag; int *freeze_flag; int *freeze_map; int *atom_label; int *cp_atm_lst; } atommaps; struct therm_info { int num_nhc; int len_nhc; int nres_nhc; int nyosh_nhc; int therm_typ; int num_nhc_proc; int num_nhc_share; int mytherm_start; double dt_nhc; int *inhc_x; int *itherm_nshare; double *ditherm_nshare_i; int *map_share; double *text_nhc; double *wdti; double **mass_nhc; } therm_info_class; struct therm_info therm_info_bead; struct therm_pos { double **x_nhc; double x_nhc_tot; } therm_class; struct therm_pos *therm_bead; struct vel_samp_class { int ivel_smpl_on; int ivel_scale_on; int nvx_smpl; int nvx_scale; int nvnhc_smpl; int iseed; double qseed; } vel_samp_class; struct energy_ctrl { int pme_on; int int_res_ter; int isep_vvdw; int iswit_vdw; int block_std_on; int iget_pe_real_inter_freq; int iget_pe_real_inter; int itime; int iget_full_inter; int iget_full_intra; int iget_full_pimd; } energy_ctrl; struct nbr_list { int iver; int ilnk; int nolst; int brnch_root_list_opt; double *x0; struct verlist { int iver_init; int iver_fill; int nolst_ver_update; int jver_pad; int nmem_min_lst; int nver_lst; int nver_lst_res; int nver_lst_now; int nver_lst_now_res; int *nter; int *jter; int *jver_off; int *nter_res; int *jter_res; int *jver_off_res; double mem_safe; } verlist; struct lnklist { int ilnk_init; int lnk_for_odd; int ncell_div_avg; int lnk_excl_safe; int lnk_vol_safe; int ncell_a; int natm_cell_max; int lnk_list_dim; int nshft_lnk; int nshft_lnk_res; double vol_lnk_map; double rcut_max; int *lnk_list; int *ishft_a; int *iexl_chk; int *ishft_a_res; int *iexl_chk_res; int *natm_cell; double *shft_wght; double *shft_wght_res; double *hmat_lnk; } lnklist; struct brnch_root { int nbrnch_tot; int nroot_tot; int natm_add_tot; int nbrnch_root_max; double brnch_root_dist_max; double cutdif_min_brnch_root; double cutdif_min_brnch_brnch; double cutdif_min_brnch_root_res; double cutdif_min_brnch_brnch_res; double r2_nocheck_dist; double r2_nocheck_dist_res; double cutskin_bb_min; double cutskin_bb_min_res; int *brnch_atm_list; int *brnch_atm_root; int *root_atm_list; int *root_atm_map; int *brnch_atm_map; int *nbrnch_of_root_big; int *nbrnch_of_root; int **ibrnch_of_root; int *natm_add; int *iatm_add; int *iatm_add_off; } brnch_root; } nbr_list; struct interact { int nsplin; int iswit_vdw; int dielectric_opt; int ishave_opt; int nter_typ; int nsplin_tot; int ninter_mall; int nsplin_mall_tot; int *inter_map_index; double dielectric_rheal; double dielectric_cut; double dielectric_eps; double brnch_root_skin; double skin; double brnch_root_cut; double rheal_res; double pten_inter_guess; double pten_kin_guess; double clong; double clong_res; double spread_now; double spread_lnk; double brnch_root_skin_lnk; double cutoff_max; double *cutoff; double *cutoff_res; double *cutti; double *cutskin; double *cutskin_res; double *cutskin_root; double *cutskin_root_res; double *vcut_coul; double *rmin_spl; double *dr_spl; double *cv0; double *cdv0; double *cv0_c; double *cdv0_c; } interact; struct int_scr { double v_lnv; double *x; double *vx; double *gx; double **x_nhc; double *vgmat; double *x_vol_nhc; double *sc; double *sc_temp; double *atm_kin; double *step_up; struct therm_scr { double *sc; double *atm_kin; } *therm_scr; } int_scr; struct ewd_scr { double *q; double *x; double *fx; double *heli; double *cossc; double *fx2; double *temp; double *helr_now; } ewd_scr; struct for_scr { int nlen; int nsplin_t; int num_brk; int intact; double wght_lnk; double wght_ter; double wght_ter_res; double wght_tra; double wght_tra_res; double wght_pimd; int *j_indext; int *i_indext2; int *j_lnk; int *j_index; int *num_brk_i; int *iexcl; int *index_atm; } for_scr; double tot_memory; struct part_mesh { int pme_on; int kmax_pme; int n_interp; int pme_res_on; int kmax_pme_res; int n_interp_res; int pme_para_opt; int nlen_pme; int nktot_pme; int ngrid_a; int nktot_pme_res; int ngrid_a_res; int ninterp_mall; int ninterp_tot_mall; int *iatemp; int *nc; int **igrid_a; int **igrid_now; double ecut; double ecut_res; double *bweight_tot_res; double *bweight_tot; double *qgrid; double *qgrid_scr; double *qgrid_tmp_real; double *qgrid_tmp_imag; double *frac_a; double *aj; double **ua; double **mn_a; double **dmn_a; double **qgrid_now; } part_mesh; struct surface { int isurf_on; int natm_typ; int nsplin_surf; int nsplin_tot; double zheal; double surface_height; double *surface_pot; double *surface_forc; double *zcut_off; double *dz_spl; double *dzi_spl; double *zmin_spl; char surface_type[50]; } surface; struct communicate { int np_beads; int myid; int myid_bead_forc; int myid_bead; int myid_bead_prime; int myid_state; int myid_forc; int myid_forc_source; int myid_forc_target; int world; int comm_beads; int comm_beads_forc; int comm_states; int comm_forc; int comm_forc_source; int comm_forc_target; int comm_faux; } communicate; struct class_comm_forc_pkg { int num_proc; int myid; int myatm_start; int mytherm_start; int *displs_atm; int *displs_therm; int comm; int world; double dbl_num_proc; struct class_plimpton_ind { int num_proc_source; int num_proc_target; int myid_source; int myid_target; int natoms_tot; int *index_src; int *index_src_even; int *index_src_odd; int *index_trg; int *index_trg_even; int *index_trg_odd; int *displs_atm_trg; int *displs_atm_src; int *src_odd_end; int *src_even_end; int *trg_odd_end; int *trg_even_end; int *src_odd_begin; int *src_even_begin; int *trg_odd_begin; int *trg_even_begin; int my_src_odd_counts; int my_src_even_counts; int my_trg_odd_counts; int my_trg_even_counts; int *my_src_odd; int *my_src_even; int *my_trg_odd; int *my_trg_even; int **jmax; int *jmin; int **imax; int source; int target; } plimpton_ind; } class_comm_forc_pkg; } *

variable_types: i int

variable_types: vxcm double

variable_types: vycm double

variable_types: vzcm double

variable_types:
mass
double *

user_defined_types: struct class { struct clatoms_info clatoms_info; struct clatoms_tran clatoms_tran; struct clatoms_pos *clatoms_pos; struct ghost_atoms ghost_atoms; struct atommaps atommaps; struct therm_info therm_info_class; struct therm_info therm_info_bead; struct therm_pos therm_class; struct therm_pos *therm_bead; struct vel_samp_class vel_samp_class; struct energy_ctrl energy_ctrl; struct nbr_list nbr_list; struct interact interact; struct int_scr int_scr; struct ewd_scr ewd_scr; struct for_scr for_scr; double tot_memory; struct part_mesh part_mesh; struct surface surface; struct communicate communicate; struct class_comm_forc_pkg class_comm_forc_pkg; }

user_defined_types: struct nbr_list { int iver; int ilnk; int nolst; int brnch_root_list_opt; double *x0; struct verlist verlist; struct lnklist lnklist; struct brnch_root brnch_root; }

user_defined_types: struct int_scr { double v_lnv; double *x; double *vx; double *gx; double **x_nhc; double *vgmat; double *x_vol_nhc; double *sc; double *sc_temp; double *atm_kin; double *step_up; struct therm_scr *therm_scr; }

user_defined_types: struct class_comm_forc_pkg { int num_proc; int myid; int myatm_start; int mytherm_start; int *displs_atm; int *displs_therm; int comm; int world; double dbl_num_proc; struct class_plimpton_ind plimpton_ind; }


repo: TuckermanGroup/PINY

original_code:
void map_residue_bonds(RESBOND_PARSE *resbond_parse)
{
  int i;
  int indx1,indx2,itemp1,itemp2;
  for(i=1;i<=resbond_parse->nresidue;i++){
    resbond_parse->nres_bond1_jres[i]=0;
    resbond_parse->nres_bond2_jres[i]=0;
  }
  for(i=1;i<=resbond_parse->nres_bond;i++){
   indx1 = resbond_parse->resbond_prm[i].res1_index;
   indx2 = resbond_parse->resbond_prm[i].res2_index;
   resbond_parse->nres_bond1_jres[indx1] += 1;
   resbond_parse->nres_bond2_jres[indx2] += 1;
  }
  resbond_parse->res_bond1_off[1]=0;
  resbond_parse->res_bond2_off[1]=0;
  for(i=1;i<=resbond_parse->nresidue-1;i++){
    resbond_parse->res_bond1_off[(i+1)]=
      (resbond_parse->res_bond1_off[i]+resbond_parse->nres_bond1_jres[i]);
    resbond_parse->res_bond2_off[(i+1)]=
      (resbond_parse->res_bond2_off[i]+resbond_parse->nres_bond2_jres[i]);
  }
  for(i=1;i<=resbond_parse->nresidue;i++){
    resbond_parse->nres_bond1_jres[i]=0;
    resbond_parse->nres_bond2_jres[i]=0;
  }
  for(i=1;i<=resbond_parse->nres_bond;i++){
    indx1 = resbond_parse->resbond_prm[i].res1_index;
    indx2 = resbond_parse->resbond_prm[i].res2_index;
    resbond_parse->nres_bond1_jres[indx1] += 1;
    resbond_parse->nres_bond2_jres[indx2] += 1;
    itemp1=(resbond_parse->nres_bond1_jres[indx1]
          + resbond_parse->res_bond1_off[indx1]);
    itemp2=(resbond_parse->nres_bond2_jres[indx2]
          + resbond_parse->res_bond2_off[indx2]);
    resbond_parse->res_bond1_index[itemp1] = i;
    resbond_parse->res_bond2_index[itemp2] = i;
  }
}

canonical_original_code:
void map_residue_bonds(struct resbond_parse *resbond_parse)
{
  int i;
  int indx1; int indx2; int itemp1; int itemp2;
  for(i=1;i<=resbond_parse->nresidue;i++){
    resbond_parse->nres_bond1_jres[i]=0;
    resbond_parse->nres_bond2_jres[i]=0;
  }
  for(i=1;i<=resbond_parse->nres_bond;i++){
   indx1 = resbond_parse->resbond_prm[i].res1_index;
   indx2 = resbond_parse->resbond_prm[i].res2_index;
   resbond_parse->nres_bond1_jres[indx1] += 1;
   resbond_parse->nres_bond2_jres[indx2] += 1;
  }
  resbond_parse->res_bond1_off[1]=0;
  resbond_parse->res_bond2_off[1]=0;
  for(i=1;i<=resbond_parse->nresidue-1;i++){
    resbond_parse->res_bond1_off[(i+1)]=
      (resbond_parse->res_bond1_off[i]+resbond_parse->nres_bond1_jres[i]);
    resbond_parse->res_bond2_off[(i+1)]=
      (resbond_parse->res_bond2_off[i]+resbond_parse->nres_bond2_jres[i]);
  }
  for(i=1;i<=resbond_parse->nresidue;i++){
    resbond_parse->nres_bond1_jres[i]=0;
    resbond_parse->nres_bond2_jres[i]=0;
  }
  for(i=1;i<=resbond_parse->nres_bond;i++){
    indx1 = resbond_parse->resbond_prm[i].res1_index;
    indx2 = resbond_parse->resbond_prm[i].res2_index;
    resbond_parse->nres_bond1_jres[indx1] += 1;
    resbond_parse->nres_bond2_jres[indx2] += 1;
    itemp1=(resbond_parse->nres_bond1_jres[indx1]
          + resbond_parse->res_bond1_off[indx1]);
    itemp2=(resbond_parse->nres_bond2_jres[indx2]
          + resbond_parse->res_bond2_off[indx2]);
    resbond_parse->res_bond1_index[itemp1] = i;
    resbond_parse->res_bond2_index[itemp2] = i;
  }
}

variable_types: struct resbond_parse { int nresidue; int nres_bond; int ionfo; int iconv; struct resbond_prm { int opt; int res1_index; int iatm_res1_site; int natm_res1_1back; char label[50]; char res1_typ[50]; char res1_site[50]; char res1_file[50]; int improp_res1[5]; int iatm_res1_1back[7]; int natm_res1_2back[7]; int iatm_res1_2back[7][7]; } *resbond_prm; int *nres_bond1_jres; int *res_bond1_index; int *res_bond1_off; } *

return_type: void

user_defined_types: struct resbond_parse { int nresidue; int nres_bond; int ionfo; int iconv; struct resbond_prm *resbond_prm; int *nres_bond1_jres; int *res_bond1_index; int *res_bond1_off; }


original_code:
void resbond_parse_realloc(RESBOND_PARSE *resbond_parse)
{
  if(resbond_parse->nres_bond > resbond_parse->nres_bond_max){
     resbond_parse->nres_bond_max +=
    (((100)>(resbond_parse->nres_bond-resbond_parse->nres_bond_max))?(100):(resbond_parse->nres_bond-resbond_parse->nres_bond_max));
     resbond_parse->resbond_prm = (RESBOND_PRM *)
                    crealloc(&(resbond_parse->resbond_prm[1]),
                              (resbond_parse->nres_bond_max)
                              *sizeof(RESBOND_PRM))-1;
     resbond_parse->res_bond1_index = (int *)
                      crealloc(&(resbond_parse->res_bond1_index[1]),
                              (resbond_parse->nres_bond_max)*sizeof(int))-1;
     resbond_parse->res_bond2_index = (int *)
                      crealloc(&(resbond_parse->res_bond2_index[1]),
                              (resbond_parse->nres_bond_max)*sizeof(int))-1;
  }
  if(resbond_parse->nresidue > resbond_parse->nresidue_max){
     resbond_parse->nresidue_max +=
         (((100)>(resbond_parse->nresidue-resbond_parse->nresidue_max))?(100):(resbond_parse->nresidue-resbond_parse->nresidue_max));
     resbond_parse->res_bond1_off = (int *)
                      crealloc(&(resbond_parse->res_bond1_off[1]),
                                (resbond_parse->nresidue_max)*sizeof(int))-1;
     resbond_parse->res_bond2_off = (int *)
                      crealloc(&(resbond_parse->res_bond2_off[1]),
                                (resbond_parse->nresidue_max)*sizeof(int))-1;
     resbond_parse->nres_bond1_jres = (int *)
                      crealloc(&(resbond_parse->nres_bond1_jres[1]),
                                (resbond_parse->nresidue_max)*sizeof(int))-1;
     resbond_parse->nres_bond2_jres = (int *)
                      crealloc(&(resbond_parse->nres_bond2_jres[1]),
                                (resbond_parse->nresidue_max)*sizeof(int))-1;
  }
}

canonical_original_code:
void resbond_parse_realloc(struct resbond_parse *resbond_parse)
{
  if(resbond_parse->nres_bond > resbond_parse->nres_bond_max){
     resbond_parse->nres_bond_max +=
    (((100)>(resbond_parse->nres_bond-resbond_parse->nres_bond_max))?(100):(resbond_parse->nres_bond-resbond_parse->nres_bond_max));
     resbond_parse->resbond_prm = (struct resbond_prm *)
                    crealloc(&(resbond_parse->resbond_prm[1]),
                              (resbond_parse->nres_bond_max)
                              *sizeof(RESBOND_PRM))-1;
     resbond_parse->res_bond1_index = (int *)
                      crealloc(&(resbond_parse->res_bond1_index[1]),
                              (resbond_parse->nres_bond_max)*sizeof(int))-1;
     resbond_parse->res_bond2_index = (int *)
                      crealloc(&(resbond_parse->res_bond2_index[1]),
                              (resbond_parse->nres_bond_max)*sizeof(int))-1;
  }
  if(resbond_parse->nresidue > resbond_parse->nresidue_max){
     resbond_parse->nresidue_max +=
         (((100)>(resbond_parse->nresidue-resbond_parse->nresidue_max))?(100):(resbond_parse->nresidue-resbond_parse->nresidue_max));
     resbond_parse->res_bond1_off = (int *)
                      crealloc(&(resbond_parse->res_bond1_off[1]),
                                (resbond_parse->nresidue_max)*sizeof(int))-1;
     resbond_parse->res_bond2_off = (int *)
                      crealloc(&(resbond_parse->res_bond2_off[1]),
                                (resbond_parse->nresidue_max)*sizeof(int))-1;
     resbond_parse->nres_bond1_jres = (int *)
                      crealloc(&(resbond_parse->nres_bond1_jres[1]),
                                (resbond_parse->nresidue_max)*sizeof(int))-1;
     resbond_parse->nres_bond2_jres = (int *)
                      crealloc(&(resbond_parse->nres_bond2_jres[1]),
                                (resbond_parse->nresidue_max)*sizeof(int))-1;
  }
}

user_defined_types: struct resbond_prm { int opt; int res1_index; int iatm_res1_site; int natm_res1_1back; char label[50]; char res1_typ[50]; char res1_site[50]; char res1_file[50]; int improp_res1[5]; int iatm_res1_1back[7]; int natm_res1_2back[7]; int iatm_res1_2back[7][7]; }


original_code:
void get_ghost_pos(CLATOMS_INFO *clatoms_info,CLATOMS_POS *clatoms_pos,
                   GHOST_ATOMS *ghost_atoms)
{
  int igloc,igpart,ighost,icoef,iii;
   double *clatoms_x = clatoms_pos->x;
   double *clatoms_y = clatoms_pos->y;
   double *clatoms_z = clatoms_pos->z;
   int nghost = ghost_atoms->nghost_tot;
   double **ghost_atoms_coef = ghost_atoms->coef;
   int *ghost_atoms_ighost_map = ghost_atoms->ighost_map;
   int *ghost_atoms_natm_comp = ghost_atoms->natm_comp;
   int **ghost_atoms_iatm_comp = ghost_atoms->iatm_comp;
 if(nghost > 0) {
  for(ighost=1;ighost <= nghost;ighost++){
   igloc = ghost_atoms_ighost_map[ighost];
   clatoms_x[igloc] = 0.0;
   clatoms_y[igloc] = 0.0;
   clatoms_z[igloc] = 0.0;
   for(icoef=1;icoef<=ghost_atoms_natm_comp[ighost];icoef++) {
     igpart = ghost_atoms_iatm_comp[icoef][ighost];
     clatoms_x[igloc] += ghost_atoms_coef[icoef][ighost]*clatoms_x[igpart];
     clatoms_y[igloc] += ghost_atoms_coef[icoef][ighost]*clatoms_y[igpart];
     clatoms_z[igloc] += ghost_atoms_coef[icoef][ighost]*clatoms_z[igpart];
   }
  }
 }
}

canonical_original_code:
void get_ghost_pos(struct clatoms_info *clatoms_info, struct clatoms_pos *clatoms_pos, struct ghost_atoms *ghost_atoms)
{
  int igloc; int igpart; int ighost; int icoef; int iii;
   double *clatoms_x = clatoms_pos->x;
   double *clatoms_y = clatoms_pos->y;
   double *clatoms_z = clatoms_pos->z;
   int nghost = ghost_atoms->nghost_tot;
   double **ghost_atoms_coef = ghost_atoms->coef;
   int *ghost_atoms_ighost_map = ghost_atoms->ighost_map;
   int *ghost_atoms_natm_comp = ghost_atoms->natm_comp;
   int **ghost_atoms_iatm_comp = ghost_atoms->iatm_comp;
 if(nghost > 0) {
  for(ighost=1;ighost <= nghost;ighost++){
   igloc = ghost_atoms_ighost_map[ighost];
   clatoms_x[igloc] = 0.0;
   clatoms_y[igloc] = 0.0;
   clatoms_z[igloc] = 0.0;
   for(icoef=1;icoef<=ghost_atoms_natm_comp[ighost];icoef++) {
     igpart = ghost_atoms_iatm_comp[icoef][ighost];
     clatoms_x[igloc] += ghost_atoms_coef[icoef][ighost]*clatoms_x[igpart];
     clatoms_y[igloc] += ghost_atoms_coef[icoef][ighost]*clatoms_y[igpart];
     clatoms_z[igloc] += ghost_atoms_coef[icoef][ighost]*clatoms_z[igpart];
   }
  }
 }
}

variable_types: struct clatoms_info { int natm_tot; int pi_beads; int pi_beads_proc; int pi_beads_proc_st; int pi_beads_proc_end; int nfree; int nfree_pimd; int nchrg; int pi_beads_full_ter; int pi_beads_res_ter; int pi_beads_full_tra; int pi_beads_res_tra; int cg_reset_flag; int natm_mall; int nchrg_mall; int hess_calc; int natm_proc; int N_H2; int i_H2_start; int nab_initio; int myatm_start; double gamma_adb; double wght_pimd; double pi_temperature; double pi_beads_full_ter_wght; double pi_beads_res_ter_wght; double pi_beads_full_tra_wght; double pi_beads_res_tra_wght; double rcut_spread; double mass_sc_fact; int *ip_lab; int *ichrg; int *cp_vlnc_up; int *cp_atm_flag; double *mass; double *q; double *alp_pol; double *b_neut; double *roll_sc; double *text_atm; double *text_mol; double *xold; double *prekf; double *xmod; double alp_ewd; } *

variable_types: struct clatoms_pos { double *mass; double *x; double *vx; double *fx; double *fxt; double *fxm; double *hess_xx; } *

variable_types: struct ghost_atoms { int nghost_tot; int natm_comp_max; int nghost_mall; int nghost_old; int ncomp_mall; int ncomp_old; int *ighost_map; int *natm_comp; int **iatm_comp; double **coef; } *

variable_types: igloc int

variable_types: igpart int

variable_types: ighost int

variable_types: icoef int

variable_types: iii int

variable_types: nghost int


original_code:
void distrib_ghost_force(CLATOMS_INFO *clatoms_info,CLATOMS_POS *clatoms_pos,
                         GHOST_ATOMS *ghost_atoms, int iver_get)
{
 int igloc,igpart,ighost,icoef,nghost=ghost_atoms->nghost_tot;
   double *clatoms_fx = clatoms_pos->fx;
   double *clatoms_fy = clatoms_pos->fy;
   double *clatoms_fz = clatoms_pos->fz;
   double *clatoms_fxt = clatoms_pos->fxt;
   double *clatoms_fyt = clatoms_pos->fyt;
   double *clatoms_fzt = clatoms_pos->fzt;
   double **ghost_atoms_coef = ghost_atoms->coef;
   int *ghost_atoms_ighost_map = ghost_atoms->ighost_map;
   int *ghost_atoms_natm_comp = ghost_atoms->natm_comp;
   int **ghost_atoms_iatm_comp = ghost_atoms->iatm_comp;
 if(nghost > 0) {
  for(ighost=1;ighost <= nghost;ighost++){
    igloc = ghost_atoms_ighost_map[ighost];
    for(icoef=1;icoef<=ghost_atoms_natm_comp[ighost];icoef++) {
      igpart = ghost_atoms_iatm_comp[icoef][ighost];
      clatoms_fx[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fx[igloc];
      clatoms_fy[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fy[igloc];
      clatoms_fz[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fz[igloc];
    }
    clatoms_fx[igloc] = 0.0;
    clatoms_fy[igloc] = 0.0;
    clatoms_fz[igloc] = 0.0;
  }
 }
 if((nghost > 0)&&(iver_get==1)) {
  for(ighost=1;ighost <= nghost;ighost++){
    igloc = ghost_atoms_ighost_map[ighost];
    for(icoef=1;icoef<=ghost_atoms_natm_comp[ighost];icoef++) {
      igpart = ghost_atoms_iatm_comp[icoef][ighost];
      clatoms_fxt[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fxt[igloc];
      clatoms_fyt[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fyt[igloc];
      clatoms_fzt[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fzt[igloc];
    }
    clatoms_fxt[igloc] = 0.0;
    clatoms_fyt[igloc] = 0.0;
    clatoms_fzt[igloc] = 0.0;
  }
 }
}

canonical_original_code:
void distrib_ghost_force(struct clatoms_info *clatoms_info, struct clatoms_pos *clatoms_pos, struct ghost_atoms *ghost_atoms, int iver_get)
{
 int igloc; int igpart; int ighost; int icoef; int nghost = ghost_atoms->nghost_tot;
   double *clatoms_fx = clatoms_pos->fx;
   double *clatoms_fy = clatoms_pos->fy;
   double *clatoms_fz = clatoms_pos->fz;
   double *clatoms_fxt = clatoms_pos->fxt;
   double *clatoms_fyt = clatoms_pos->fyt;
   double *clatoms_fzt = clatoms_pos->fzt;
   double **ghost_atoms_coef = ghost_atoms->coef;
   int *ghost_atoms_ighost_map = ghost_atoms->ighost_map;
   int *ghost_atoms_natm_comp = ghost_atoms->natm_comp;
   int **ghost_atoms_iatm_comp = ghost_atoms->iatm_comp;
 if(nghost > 0) {
  for(ighost=1;ighost <= nghost;ighost++){
    igloc = ghost_atoms_ighost_map[ighost];
    for(icoef=1;icoef<=ghost_atoms_natm_comp[ighost];icoef++) {
      igpart = ghost_atoms_iatm_comp[icoef][ighost];
      clatoms_fx[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fx[igloc];
      clatoms_fy[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fy[igloc];
      clatoms_fz[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fz[igloc];
    }
    clatoms_fx[igloc] = 0.0;
    clatoms_fy[igloc] = 0.0;
    clatoms_fz[igloc] = 0.0;
  }
 }
 if((nghost > 0)&&(iver_get==1)) {
  for(ighost=1;ighost <= nghost;ighost++){
    igloc = ghost_atoms_ighost_map[ighost];
    for(icoef=1;icoef<=ghost_atoms_natm_comp[ighost];icoef++) {
      igpart = ghost_atoms_iatm_comp[icoef][ighost];
      clatoms_fxt[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fxt[igloc];
      clatoms_fyt[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fyt[igloc];
      clatoms_fzt[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fzt[igloc];
    }
    clatoms_fxt[igloc] = 0.0;
    clatoms_fyt[igloc] = 0.0;
    clatoms_fzt[igloc] = 0.0;
  }
 }
}

user_defined_types: struct clatoms_info { int natm_tot; int pi_beads; int pi_beads_proc; int pi_beads_proc_st; int pi_beads_proc_end; int nfree; int nfree_pimd; int nchrg; int pi_beads_full_ter; int pi_beads_res_ter; int pi_beads_full_tra; int pi_beads_res_tra; int cg_reset_flag; int natm_mall; int nchrg_mall; int hess_calc; int natm_proc; int N_H2; int i_H2_start; int nab_initio; int myatm_start; double gamma_adb; double wght_pimd; double pi_temperature; double pi_beads_full_ter_wght; double pi_beads_res_ter_wght; double pi_beads_full_tra_wght; double pi_beads_res_tra_wght; double rcut_spread; double mass_sc_fact; int *ip_lab; int *ichrg; int *cp_vlnc_up; int *cp_atm_flag; double *mass; double *q; double *alp_pol; double *b_neut; double *roll_sc; double *text_atm; double *text_mol; double *xold; double *prekf; double *xmod; double alp_ewd; }

user_defined_types: struct clatoms_pos { double *mass; double *x; double *vx; double *fx; double *fxt; double *fxm; double *hess_xx; }

user_defined_types: struct ghost_atoms { int nghost_tot; int natm_comp_max; int nghost_mall; int nghost_old; int ncomp_mall; int ncomp_old; int *ighost_map; int *natm_comp; int **iatm_comp; double **coef; }


original_code:
void distrib_ghost_force_mode(CLATOMS_INFO *clatoms_info,CLATOMS_POS *clatoms_pos,
                              GHOST_ATOMS *ghost_atoms)
{
 int igloc,igpart,ighost,icoef,nghost=ghost_atoms->nghost_tot;
   double *clatoms_fx = clatoms_pos->fx;
   double *clatoms_fy = clatoms_pos->fy;
   double *clatoms_fz = clatoms_pos->fz;
   double **ghost_atoms_coef = ghost_atoms->coef;
   int *ghost_atoms_ighost_map = ghost_atoms->ighost_map;
   int *ghost_atoms_natm_comp = ghost_atoms->natm_comp;
   int **ghost_atoms_iatm_comp = ghost_atoms->iatm_comp;
 if(nghost > 0) {
  for(ighost=1;ighost <= nghost;ighost++){
    igloc = ghost_atoms_ighost_map[ighost];
    for(icoef=1;icoef<=ghost_atoms_natm_comp[ighost];icoef++) {
      igpart = ghost_atoms_iatm_comp[icoef][ighost];
      clatoms_fx[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fx[igloc];
      clatoms_fy[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fy[igloc];
      clatoms_fz[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fz[igloc];
    }
    clatoms_fx[igloc] = 0.0;
    clatoms_fy[igloc] = 0.0;
    clatoms_fz[igloc] = 0.0;
  }
 }
}

canonical_original_code:
void distrib_ghost_force_mode(struct clatoms_info *clatoms_info, struct clatoms_pos *clatoms_pos, struct ghost_atoms *ghost_atoms)
{
 int igloc; int igpart; int ighost; int icoef; int nghost = ghost_atoms->nghost_tot;
   double *clatoms_fx = clatoms_pos->fx;
   double *clatoms_fy = clatoms_pos->fy;
   double *clatoms_fz = clatoms_pos->fz;
   double **ghost_atoms_coef = ghost_atoms->coef;
   int *ghost_atoms_ighost_map = ghost_atoms->ighost_map;
   int *ghost_atoms_natm_comp = ghost_atoms->natm_comp;
   int **ghost_atoms_iatm_comp = ghost_atoms->iatm_comp;
 if(nghost > 0) {
  for(ighost=1;ighost <= nghost;ighost++){
    igloc = ghost_atoms_ighost_map[ighost];
    for(icoef=1;icoef<=ghost_atoms_natm_comp[ighost];icoef++) {
      igpart = ghost_atoms_iatm_comp[icoef][ighost];
      clatoms_fx[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fx[igloc];
      clatoms_fy[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fy[igloc];
      clatoms_fz[igpart] += ghost_atoms_coef[icoef][ighost]*clatoms_fz[igloc];
    }
    clatoms_fx[igloc] = 0.0;
    clatoms_fy[igloc] = 0.0;
    clatoms_fz[igloc] = 0.0;
  }
 }
}


original_code:
void int_NVT_cp(CLASS *class,BONDED *bonded,GENERAL_DATA *general_data,CP *cp)
{
    int iii;
    int i,ip=1,ipart,icoef,is,iflag,ifirst=1;
    int exit_flag=0;
    int natm_tot,ichain,inhc;
    double dt,dt2,tol_glob;
    int iflag_mass = 1;
    int ir_tra = 1;
    int ir_tor = 1;
    int ir_ter = 1;
    int anneal_opt = general_data->simopts.anneal_opt;
    double anneal_target_temp = general_data->simopts.ann_target_temp;
    double ann_rate = general_data->simopts.ann_rate;
    int num_nhc = class->therm_info_class.num_nhc;
    int len_nhc = class->therm_info_class.len_nhc;
    double **therm_v_nhc = class->therm_class.v_nhc;
    double **therm_gkt = class->therm_info_class.gkt;
    double **therm_mass_nhc = class->therm_info_class.mass_nhc;
    double *class_clatoms_xold = class->clatoms_info.xold;
    double *class_clatoms_yold = class->clatoms_info.yold;
    double *class_clatoms_zold = class->clatoms_info.zold;
    double *class_clatoms_x = class->clatoms_pos[1].x;
    double *class_clatoms_y = class->clatoms_pos[1].y;
    double *class_clatoms_z = class->clatoms_pos[1].z;
    double *class_clatoms_vx = class->clatoms_pos[1].vx;
    double *class_clatoms_vy = class->clatoms_pos[1].vy;
    double *class_clatoms_vz = class->clatoms_pos[1].vz;
    double *class_clatoms_fx = class->clatoms_pos[1].fx;
    double *class_clatoms_fy = class->clatoms_pos[1].fy;
    double *class_clatoms_fz = class->clatoms_pos[1].fz;
    double *class_clatoms_mass = class->clatoms_info.mass;
    int myid_state = class->communicate.myid_state;
    int np_states = class->communicate.np_states;
    int np_forc = class->communicate.np_forc;
    int comm_states = class->communicate.comm_states;
    general_data->timeinfo.exit_flag = 0;
    natm_tot = class->clatoms_info.natm_tot;
    (general_data->timeinfo.int_res_tra) = 0;
    (general_data->timeinfo.int_res_ter) = 0;
    dt = (general_data->timeinfo.dt);
    dt2 = (general_data->timeinfo.dt)/2.0;
    class->therm_info_class.dt_nhc = dt;
    class->therm_info_class.dti_nhc = dt/( (double)(
                             class->therm_info_class.nres_nhc) );
  if(myid_state==0 || np_forc > 1){
    set_yosh(class->therm_info_class.nyosh_nhc,
             class->therm_info_class.dti_nhc ,class->therm_info_class.wdti,
             class->therm_info_class.wdti2,class->therm_info_class.wdti4,
             class->therm_info_class.wdti8,
             class->therm_info_class.wdti16);
  }
    general_data->stat_avg.iter_shake = 0;
    general_data->stat_avg.iter_ratl = 0;
    general_data->stat_avg.iter_23r = 0.0;
    general_data->stat_avg.iter_33r = 0.0;
    general_data->stat_avg.iter_46r = 0.0;
    general_data->stat_avg.iter_23 = 0.0;
    general_data->stat_avg.iter_33 = 0.0;
    general_data->stat_avg.iter_46 = 0.0;
  int_0_to_dt2_cp(class,bonded,general_data,cp);
  if( (myid_state==0) || (np_forc > 1) ){
   if(general_data->simopts.cp == 1){
    int_0_to_dt2_nvt(class,bonded,general_data,ir_tra,ir_tor,ir_ter,dt);
   }
  }
  if(np_states > 1 && np_forc==1 ){
    comm_coord_class_state(class,general_data,1,1,0,0);
  }
    (class->energy_ctrl.iget_full_inter)= 1;
    (class->energy_ctrl.iget_res_inter) = 0;
    (class->energy_ctrl.iget_full_intra)= 1;
    (class->energy_ctrl.iget_res_intra) = 0;
     cp_energy_control(class,bonded,general_data,cp);
    if(cp->cpopts.cp_gauss == 1){
     add_gauss_force(&(cp->cpcoeffs_info),&(cp->cpcoeffs_pos[1]),
       &(cp->cpscr.cpscr_ovmat),&(cp->cpopts));
    }
  if((myid_state == 0) || (np_forc > 1) ){
    if(general_data->simopts.cp==1){
     int_dt2_to_dt_nvt(class,bonded,general_data,ir_tra,ir_tor,ir_ter,dt);
   }
  }
  int_dt2_to_dt_cp(class,bonded,general_data,cp);
if(myid_state == 0 || np_forc > 1){
  if(anneal_opt == 1){
    iflag=0;
    anneal_class(class,ann_rate,iflag,iflag_mass,anneal_target_temp,&exit_flag);
    general_data->timeinfo.exit_flag = exit_flag;
  }
}
  if(myid_state == 0 || np_forc > 1){
   int_final_class(class,bonded,general_data,iflag);
  }
               }

canonical_original_code:
void int_NVT_cp(struct class *class, struct bonded *bonded, struct general_data *general_data, struct cp *cp)
{
    int iii;
    int i; int ip = 1; int ipart; int icoef; int is; int iflag; int ifirst = 1;
    int exit_flag = 0;
    int natm_tot; int ichain; int inhc;
    double dt; double dt2; double tol_glob;
    int iflag_mass = 1;
    int ir_tra = 1;
    int ir_tor = 1;
    int ir_ter = 1;
    int anneal_opt = general_data->simopts.anneal_opt;
    double anneal_target_temp = general_data->simopts.ann_target_temp;
    double ann_rate = general_data->simopts.ann_rate;
    int num_nhc = class->therm_info_class.num_nhc;
    int len_nhc = class->therm_info_class.len_nhc;
    double **therm_v_nhc = class->therm_class.v_nhc;
    double **therm_gkt = class->therm_info_class.gkt;
    double **therm_mass_nhc = class->therm_info_class.mass_nhc;
    double *class_clatoms_xold = class->clatoms_info.xold;
    double *class_clatoms_yold = class->clatoms_info.yold;
    double *class_clatoms_zold = class->clatoms_info.zold;
    double *class_clatoms_x = class->clatoms_pos[1].x;
    double *class_clatoms_y = class->clatoms_pos[1].y;
    double *class_clatoms_z = class->clatoms_pos[1].z;
    double *class_clatoms_vx = class->clatoms_pos[1].vx;
    double *class_clatoms_vy = class->clatoms_pos[1].vy;
    double *class_clatoms_vz = class->clatoms_pos[1].vz;
    double *class_clatoms_fx = class->clatoms_pos[1].fx;
    double *class_clatoms_fy = class->clatoms_pos[1].fy;
    double *class_clatoms_fz = class->clatoms_pos[1].fz;
    double *class_clatoms_mass = class->clatoms_info.mass;
    int myid_state = class->communicate.myid_state;
    int np_states = class->communicate.np_states;
    int np_forc = class->communicate.np_forc;
    int comm_states = class->communicate.comm_states;
    general_data->timeinfo.exit_flag = 0;
    natm_tot = class->clatoms_info.natm_tot;
    (general_data->timeinfo.int_res_tra) = 0;
    (general_data->timeinfo.int_res_ter) = 0;
    dt = (general_data->timeinfo.dt);
    dt2 = (general_data->timeinfo.dt)/2.0;
    class->therm_info_class.dt_nhc = dt;
    class->therm_info_class.dti_nhc = dt/( (double)(
                             class->therm_info_class.nres_nhc) );
  if(myid_state==0 || np_forc > 1){
    set_yosh(class->therm_info_class.nyosh_nhc,
             class->therm_info_class.dti_nhc ,class->therm_info_class.wdti,
             class->therm_info_class.wdti2,class->therm_info_class.wdti4,
             class->therm_info_class.wdti8,
             class->therm_info_class.wdti16);
  }
    general_data->stat_avg.iter_shake = 0;
    general_data->stat_avg.iter_ratl = 0;
    general_data->stat_avg.iter_23r = 0.0;
    general_data->stat_avg.iter_33r = 0.0;
    general_data->stat_avg.iter_46r = 0.0;
    general_data->stat_avg.iter_23 = 0.0;
    general_data->stat_avg.iter_33 = 0.0;
    general_data->stat_avg.iter_46 = 0.0;
  int_0_to_dt2_cp(class,bonded,general_data,cp);
  if( (myid_state==0) || (np_forc > 1) ){
   if(general_data->simopts.cp == 1){
    int_0_to_dt2_nvt(class,bonded,general_data,ir_tra,ir_tor,ir_ter,dt);
   }
  }
  if(np_states > 1 && np_forc==1 ){
    comm_coord_class_state(class,general_data,1,1,0,0);
  }
    (class->energy_ctrl.iget_full_inter)= 1;
    (class->energy_ctrl.iget_res_inter) = 0;
    (class->energy_ctrl.iget_full_intra)= 1;
    (class->energy_ctrl.iget_res_intra) = 0;
     cp_energy_control(class,bonded,general_data,cp);
    if(cp->cpopts.cp_gauss == 1){
     add_gauss_force(&(cp->cpcoeffs_info),&(cp->cpcoeffs_pos[1]),
       &(cp->cpscr.cpscr_ovmat),&(cp->cpopts));
    }
  if((myid_state == 0) || (np_forc > 1) ){
    if(general_data->simopts.cp==1){
     int_dt2_to_dt_nvt(class,bonded,general_data,ir_tra,ir_tor,ir_ter,dt);
   }
  }
  int_dt2_to_dt_cp(class,bonded,general_data,cp);
if(myid_state == 0 || np_forc > 1){
  if(anneal_opt == 1){
    iflag=0;
    anneal_class(class,ann_rate,iflag,iflag_mass,anneal_target_temp,&exit_flag);
    general_data->timeinfo.exit_flag = exit_flag;
  }
}
  if(myid_state == 0 || np_forc > 1){
   int_final_class(class,bonded,general_data,iflag);
  }
               }

variable_types: struct bonded { struct bond { int npow; int ntyp_pow; int ncon; int ntyp_con; int nbond_pow_mall; int nbond_typ_pow_mall; int nbond_con_mall; int nbond_typ_con_mall; int block_pow_on; int ncon_tot; int ncon_max; int nblock_pow; int nblock_con; int *j1_pow; int *jtyp_pow; int *j1_con; int *jtyp_con; int *iblock_pow_size; int *iblock_pow_conflict_1; int *iblock_con_size; int *iblock_con_conflict_1; double *eq_pow; double *eq_pow_res; double *c_0; double *dc_0; double *al_con; double *eq_con; } bond; struct grp_bond_con { int num_33; int num_21; int num_43; int ntyp_33; int num_23; int ntyp_23; int num_46; int ntyp_46; int max_iter; int ngrp_21_mall; int ngrp_33_mall; int ngrp_43_mall; int ngrp_23_mall; int ngrp_46_mall; int ngrp_typ_21_mall; int ngrp_typ_33_mall; int ngrp_typ_43_mall; int ngrp_typ_23_mall; int ngrp_typ_46_mall; int num_21_tot; double tol; int *j1_33; int *j1_21; int *j2_43; int *jtyp_33; int *j1_23; int *jtyp_23; int *j1_46; int *jtyp_46; double **al_33; double **al_23; double **al_21; double **eq_21; double **al_46; int ncons_gather_tot; int ncons_gather; int ncons_gather_max; int *ind_gather_fwd; int *ind_gather_bck; int *ind_gather_scr; } grp_bond_con; struct grp_bond_watts { int num_33; int num_33_tot; int ntyp_33; int ngrp_33_mall; int ngrp_typ_33_mall; int *j1_33; int *jtyp_33; double *cos_thet0_2; double **eq_33; double **c_0_33; double **c_4_33; double **dc_0_33; double **dc_4_33; } grp_bond_watts; struct constrnt { int iconstrnt; int iroll; int max_iter; double tolshake; double tolratl; } constrnt; struct bond_free { int num; int j1; int npow; int nhist; double fk; double eq; double del; double rmin; double rmax; char *file; double *hist; } bond_free; struct bend { int npow; int ntyp_pow; int ncon; int ntyp_con; int nbend_pow_mall; int nbend_typ_pow_mall; int nbend_con_mall; int nbend_typ_con_mall; int block_pow_on; int ncon_tot; int nblock_pow; int nblock_con; int *j1_pow; int *jtyp_pow; int *j1_con; int *jtyp_con; int *iblock_pow_size; int *iblock_pow_conflict_1; int *iblock_pow_conflict_3; int *iblock_con_size; int *iblock_con_conflict_1; int *iblock_con_conflict_3; double *eq_pow; double *c_0; double *s_0; double *dc_0; double *ds_0; double *al_con; double *eq_con; } bend; struct bend_free { int num; int j1; int npow; int nhist; double fk; double eq; double del; char *file; double *hist; } bend_free; struct bend_bnd { int num; int ntyp; int nbend_bnd_mall; int nbend_bnd_typ_mall; int block_on; int nblock; int *j1; int *jtyp; int *iblock_size; int *iblock_conflict_1; int *iblock_conflict_3; double *eq_bond; double *eq_bend; double *cbond_0; double *dcbond_0; double *cbend_0; double *sbend_0; double *dcbend_0; double *dsbend_0; } bend_bnd; struct tors { int npow; int ntyp_pow; int nimpr; int ncon; int ntyp_con; int ntors_pow_mall; int ntors_typ_pow_mall; int ntors_con_mall; int ntors_typ_con_mall; int block_pow_on; int block_con_on; int ncon_tot; int nblock_pow; int nblock_con; int *j1_pow; int *jtyp_pow; int *j1_con; int *jtyp_con; int *iblock_pow_size; int *iblock_pow_conflict_1; int *iblock_pow_conflict_3; int *iblock_con_size; int *iblock_con_conflict_1; int *iblock_con_conflict_3; double *c_0; double *s_0; double *dc_0; double *ds_0; double *eq_pow; double *al_con; double *eq_con; } tors; struct tors_free { int num; int npow; int nhist; int j1[3]; double fk; double eq[3]; double del; char *file; double *hist; double **hist_2d; } tors_free; struct rbar_sig_free { int nfree; int nhist_bar; int iopt; int *j1; double fk_bar; double fk_sigma; double eq_bar; double eq_sigma; double del_bar; double rmin; double smin; double rnfree; double **hist; double **hist_rn; char *file; } rbar_sig_free; struct onfo { int num; int ntyp; int nonfo_mall; int nonfo_typ_mall; int block_on; int nblock; int *j1; int *jtyp; int *iblock_size; int *iblock_conflict_1; double *feps; double *s6; double *sc; } onfo; struct ecor { int nsplin; int num; int block_on; int nblock; int nktot_res; int necor_mall; double alp_ewd; double ecut; double rmin_spl; double rmax_spl; double dr_spl; int *j1; int *iblock_size; int *iblock_conflict_1; double *cv0; } ecor; struct excl { int nlst; int nlst_root; int num_cp; int *num; int *j; int *j_off; int *j1_cp; } excl; struct intra_scr { int nlen; double wght_ter; double wght_ter_res; double wght_tra; double wght_tra_res; double int_res_inter; int *iatm_typ; int *jatm_typ; double *vpot; double *p11; double *p21; double *p31; double *x1; double *x2; double *x3; double *x4; double *x5; double *x6; double *x7; double *x8; double *fx1; double *fx2; double *fx3; double *fx4; double *dx12; double *dx13; double *dx23; double *dx42; double *dx43; double *dx56; double *dx57; double *dx67; double *dx86; double *dx87; double *c_0; double *dc_0; double *ds_0; double *s_0; double *eq; double *m1; double *vx1; double *vx2; double *sc_1; double *sc; double *q1; double *rmin; double *dri; double *vcut_coul; double *del_r; double *swit; double *cutoff_res; } intra_scr; } *

variable_types: struct general_data { struct simopts { int md; int pimd; int minimize; int cp; int cp_pimd; int cp_wave; int cp_wave_pimd; int cp_wave_min_pimd; int cp_min; int cp_wave_min; int debug; int debug_pimd; int debug_cp; int debug_cp_pimd; int pi_beads; int pi_md_typ; int initial_spread_opt; int anneal_opt; double ann_rate; double ann_start_temp; double ann_target_temp; } simopts; struct minopts { int min_std; int min_cg; int min_diis; int diis_hist_len; int cp_min_std; int cp_min_cg; int cp_min_diis; int cp_diis_hist_len; int cp_cg_line_min_len; int min_atm_com_fix_opt; double tol_coef; double tol_atom; } minopts; struct ensopts { int nve; } ensopts; struct filenames { char *iname; char *dname; char *dnamec; char *cpname; char *ksname; char *elfname; char *cvname; char *ccname; char *cpparname; char *centname; char *forcename; int low_lim_par; int high_lim_par; int iwrite_screen; int iwrite_inst; int iwrite_dump; int iwrite_kseigs; int iwrite_confv; int iwrite_confp; int iwrite_par_confp; int iwrite_confc; int iwrite_path_cent; int ifile_open; int iwrite_conf_binary; int iwrite_units; int iwrite_atm_for; int iwrite_elf; } filenames; struct statepoint { double pext; } statepoint; struct cell { int iperd; int intra_perds; int cubic_box_flag; int hmat_int_typ; int hmat_cons_typ; int imov_cp_box; double vol; double vol_cp; double vol0; double area; double alpha_conv_dual; double *hmat; double *hmat_ewd; double *hmat_cp; double *cp_box_center; double *cp_box_center_rel; double *cp_vbox_center; double *cp_fbox_center; } cell; struct timeinfo { int ntime; int ix_respa; int int_res_ter; int nres_ter; int int_res_tor; int int_res_pimd; int iget_pe_real_inter_freq; int exit_flag; double dt; } timeinfo; struct baro { int len_nhc; double x_lnv; double v_lnv_glob; double v_lnv_g; double f_lnv_p; double vol; double mass_lnv; double c2_lnv; double roll_scv; double roll_scg; double roll_scg0; double x_lnv_o; double v_lnv_g_wght; double area; double *x_vol_nhc; double *f_vol_nhc; double *hmato; } baro; struct par_rahman { double vol; double mass_hm; double c1_hm; double roll_scg; double roll_scg0; double area; double *vgmat; double *vgmat_glob; double *fgmat_p; double *roll_mtv; double *roll_mtvv; double *vtemps; double *vexpdt; double *vtempx; double *hmat_t; double *fv1; double *vgmat_g_wght; } par_rahman; struct ptens { double *tvten; double *pvten; double *pvten_inc; double *pvten_tmp_res; double *pvten_inc_t1; double *pvten_inc_a; double *pvten_inc_old; double *count_inc; double *pvten_inc_glob; double *pvten_mode; } ptens; struct stat_avg { int nexclt; int iter_shake; int iswit_vdw; int itime_update; int iter_shake_cp; int write_cp_atm_flag; double vintert; double vintrat; double vsurft; double vbondt; double vbend_bndt; double vbend_bnd_bond; double vbondt_watts; double vreal; double vvdw; double vlong; double vbond_free; double vbar_free; double kinet; double kinet_v; double vol; double kinet_nhc; double kinet_nhc_bead; double aikinet_nhc_bead; double akinet_nhc_bead; double vpot_v; double vpotnhc; double aiter_shake; double iter_23; double aiter_23; double aiter_21; double iter_23r; double aiter_23r; double aiter_21r; double acella; double aicella; double acellab; double aicellab; double apress; double press_inter; double apress_inter; double apress_intra; double press_kin; double apress_kin; double econv0; double cp_kconv0; double cpu1; double updates; double kinet_cp_up; double kinet_cp_dn; double kinet_cp; double kinet_nhc_cp; double vpotnhc_cp; double cp_ehart; double cp_eext; double cp_exc; double cp_muxc; double cp_eke; double cp_enl; double aiter_shake_cp; double maxfc; double pi_ke_prim; double api_ke_prim; double aipi_ke_prim; double kin_harm; double *apten; double fc_mag_up; double fc_max_up; double fatm_max; double count_diag_srot; double econv_now; double isokconv; } stat_avg; struct ewald { int nsplin_g; int nktot; int nktot_res; int nktot_mall; int nktot_res_mall; int nkc_max; int nkb_max; double alp_ewd; double self_erf; double ecut; double ecut_clus; double alp_clus; double gs_max; int *kastr; int *ibrk1; int *kastr_res; int *ibrk1_res; double *clus_corr_r; double *clus_corr_r_res; double *cvgs_2d0; double *vgc_1d_y; } ewald; struct para_fft_pkg3d { int nktot; int ncoef_use; int nfft_size; int nfft; int igeneric_opt; int scale_opt; int len_ifax; int nwork1; double ecut; int comm; int num_proc; int *map_proc; int *recv_counts_rho; int *recv_counts_coef; int *map_pme_dn; int *recvcounts_pme_dn; int *sendcounts_pme_dn; int *map_pme_up; int *recvcounts_pme_up; int *sendcounts_pme_up; int ndata_kc; int nkf3; int str_fft_kc_proc; int ska_fft_kc_proc; int skb_fft_kc_proc; int *sendcounts_fft_kc; int *recvcounts_fft_kc; int *sum_fft_kc_proc; int nka_fft_kc; int *ka_fft_kc; int *ifax_c_f; double *work_1c_f; double *work_1c_r; int ndata_kb; int nkf2; int str_fft_kb_proc; int ska_fft_kb_proc; int skc_fft_kb_proc; int *ska_fft_kb_proc_all; int *skc_fft_kb_proc_all; int *sendcounts_fft_kb; int *recvcounts_fft_kb; int *sum_fft_kb_proc; int *ifax_b_f; double *work_1b_f; double *work_1b_r; int ndata_ka; int nkf1; int str_fft_ka_proc; int skb_fft_ka_proc; int skc_fft_ka_proc; int *skb_fft_ka_proc_all; int *skc_fft_ka_proc_all; int *sendcounts_fft_ka; int *recvcounts_fft_ka; int *ifax_a_f; double *work_1a_f; double *work_1a_r; int *send_counts_row_big_small; int *recv_counts_row_big_small; int *sdispls_row_big_small; int *rdispls_row_big_small; int *send_counts_dual_map; int *recv_counts_dual_map; int *sdispls_dual_map; int *rdispls_dual_map; int *send_counts_row_big_small_upack; int *recv_counts_row_big_small_upack; int *sdispls_row_big_small_upack; int *rdispls_row_big_small_upack; int *send_counts_dual_map_upack; int *recv_counts_dual_map_upack; int *sdispls_dual_map_upack; int *rdispls_dual_map_upack; int *send_counts_ioff_big_small; int *recv_counts_ioff_big_small; int *sdispls_ioff_big_small; int *rdispls_ioff_big_small; } pme_fft_pkg; struct para_fft_pkg3d pme_res_fft_pkg; int error_check_on; } *

variable_types: struct cp { struct cpopts { int cp_lda; int cp_sic; int cp_gga; int cp_nonint; int cp_norb; int cp_gauss; int cp_ptens_calc; int cp_init_orthog; int cp_gs; int cp_ngrid_skip; int cp_hess_calc; int zero_cp_vel; int iwrite_coef_binary; int iread_coef_binary; int icheck_perd_size; int icheck_dual_size; int cp_para_opt; int cp_becke; int cp_pw91x; int cp_fila_1x; int cp_fila_2x; int cp_pbe_x; int cp_revpbe_x; int cp_rpbe_x; int cp_xpbe_x; int cp_brx89; int cp_brx2k; int cp_lyp; int cp_lypm1; int cp_pw91c; int cp_pbe_c; int cp_xpbe_c; int cp_tau1_c; int cp_debug_xc; int cp_dual_grid_opt; int cp_isok_opt; double te_ext; double tol_edge_dist; double tol_coef; double *occ_up; double *rocc_sum_up; double *rocc_sum_dn; } cpopts; struct cpcoeffs_info { int pi_beads; int nstate_up; int icmass_unif; int ks_rot_on; int n_ks_rot; int cp_ke_dens_on; int cp_tau_functional; int cp_elf_calc_frq; int cp_laplacian_on; int cp_nfree; int cp_nfree_up; int cp_nfree_dn; int pi_beads_proc; int pi_beads_proc_st; int pi_beads_proc_end; int nstate_up_proc; int istate_up_st; int istate_up_end; int cg_reset_flag; int diis_reset_flag; int ncoef; int ncoef_l; int ncoef_l_dens_cp_box; int icoef_start_up; int nstate_ncoef_proc_up; int nstate_ncoef_proc_max_up; int icoef_start_dn; int nstate_ncoef_proc_dn; int nstate_ncoef_proc_max_dn; int *ioff_up; int *ioff_upt; double ecut; double ecut_dens_cp_box; double cp_hess_cut; double pseud_hess_loc; double max_off_diag; double max_diag; double *cmass; double k0_up; } cpcoeffs_info; struct cpcoeffs_pos { double *cre_up; double *cre_dn; double *vcre_up; double *vcre_dn; double *fcre_up; double *fcre_dn; double *cp_hess_re_up; double *cp_hess_im_up; double *cp_hess_re_dn; double *cp_hess_im_dn; double *ksmat_up; double *ksmat_eig_up; double *ksmat_eig_dn; double ks_offset; double *norbmat_up; double *norbmati_up; double *ovmat_eigv_up; double *ovmat_eigv_dn; int icoef_form_up; int ivcoef_form_up; int ifcoef_form_up; int icoef_orth_up; int ivcoef_orth_up; int ifcoef_orth_up; double max_diag; } *cpcoeffs_pos; struct cptherm_info { int num_c_nhc; int num_c_nhc_proc; int num_c_nhc_norm; int len_c_nhc; int nres_c_nhc; int nyosh_c_nhc; int massiv_flag; int istate_nhc_opt; double cp_therm_heat_fact; double dt_nhc; double c_gkt_massiv; double cmass_nhc_massiv; int *icmapup_nhc; int *icmapdn_nhc; double *wdti; double **c_gkt; double **cmass_nhc; } cptherm_info; struct cptherm_pos { double c_nhc_massiv; double **c_nhc; double **vc_nhc; double **fc_nhc; int itherm_form_up; int itherm_form_dn; } *cptherm_pos; struct electronic_properties { double *cp_elf_up; } electronic_properties; struct cpewald { int nktot_sm; int nktot_dens_cp_box; int nktot_cp_mall; int nktot_cp_sm_mall; int nktot_dens_cp_box_mall; int box_rat; double dbox_rat; double gw_gmin; double gw_gmin_dens_cp_box; int *kmax_cp; int *kmax_cp_dens_cp_box; int *kastr_sm; int *kastr_dens_cp_box; int *ibrk1_sm; int *ibrk1_dens_cp_box; double *ak2; double *ak2_dens_cp_box; } cpewald; struct cpconstrnt { double c_tolshake; double c_tolratl; double c_tolnorb; } cpconstrnt; struct pseudo { int n_ang_max; int n_ang_max_gh; int n_ang_max_kb; int n_rad_max; int nsplin_g; int nsplin_g_tot; int num_nl_lst; int nl_cut_on; int n_ang_mall; int nsplin_g_mall; int nvpsnorm_mall; int nlist_mall; int n_interp_pme_dual; int natm_typ_nl; int natm_typ_gh; int ngh; double gmin_true; double gmin_spl; double gmax_spl; double dg_spl; double gga_cut; double nlvps_skin; double alpha_conv_dual; int *n_ang; int *nrad_0; int *nrad_max_l; int *loc_opt; int *ivps_label; int *np_nl; int *np_nl_gh; int **np_nl_rad_str; int **np_nl_rad_end; int *ip_nl; int *ip_nl_rev; int *ip_nl_gh; int *ip_nl_rev_gh; int *map_nl; int np_loc_cp_box; int np_nonloc_cp_box; int np_nonloc_cp_box_kb; int np_nonloc_cp_box_gh; int *ip_loc_cp_box; int *ip_nonloc_cp_box; double *vps0; double *dvps0; double *gzvps; double *gzvps0; double *vpsnorm; double *rcut_nl; double *rgh; double *x0w; double *q_pseud; char *vxc_typ; char *ggax_typ; char *ggac_typ; } pseudo; struct cpscr { struct cpscr_loc { double *vextr; double *vextr_dens_cp_box; double *dvextr; } cpscr_loc; struct cpscr_nonloc { int natm_nls_max; int nlscr_up; int nlscr_dn; double *vnlre_up; double *vnlre_dn; double *dvnlre_x_up; double *dvnlim_x_up; double *dvnlre_x_dn; double *dvnlim_x_dn; double *dvnlre_gxgx_up; double *dvnlre_gygy_up; double *dvnlre_gzgz_up; double *dvnlre_gxgy_up; double *dvnlre_gygz_up; double *dvnlre_gxgz_up; double *dvnlre_gxgx_dn; double *dvnlre_gygy_dn; double *dvnlre_gzgz_dn; double *dvnlre_gxgy_dn; double *dvnlre_gygz_dn; double *dvnlre_gxgz_dn; } cpscr_nonloc; struct cpscr_rho { int iset_map_flag; int iset_map_upack_flag; int iset_map_flag_pme; int iset_map_upack_flag_pme; int *map_dual; int *map_dual_upack; double *v_ks_up; double *v_ks_dn; double *v_ks_tau_up; double *v_ks_tau_dn; double *rho_up; double *rho_dn; double *rhocr_up; double *rhocr_scr; double *rhocr_up_dens_cp_box; double *rhocr_dn; double *rhocr_dn_dens_cp_box; } cpscr_rho; struct cpscr_grho { double *d2_rho_up; double *d2_rho_dn; double *d2_rho_up_store; double *d2_rho_dn_store; double *d_rhox_up; double *d_rhox_dn; double *dm_rhox_up; double *dm_rhox_dn; double *elec_ke_dens_up; double *g_rhor_x; double *g_rhoi_x; double *g2_rhor; double *rhocr_up_st; double *rhocr_dn_st; } cpscr_grho; struct cpscr_ovmat { double *ovlap1; double *ovlap3; double *ovlap5; double *ovlap7; double *state_vec1; double *state_vec2; double *state_vec3; double *state_vec4; double *state_vec5; double *state_vec6; double *state_vec7; } cpscr_ovmat; struct cpscr_wave { double *zfft; int zfft_mall_size; double *cre_up; double *cre_dn; } cpscr_wave; struct cpscr_therm { double *coef_kin; double *sc_cp; } cpscr_therm; struct cpscr_dual_pme { int *iatemp; int **igrid_a; int **igrid_now; double *a_pme; double *frac_a; double *aj; double **mn_a; double **ua; double *bw_r; int nfft_send_big_small; int nfft_recv_big_small; int num_rows_tot; int *ioff_lg_sm; int **joff_sm_lg; } cpscr_dual_pme; struct cpscr_atom_pme { int pme_on; int n_interp; int pme_para_opt; int nlen_pme; int nktot_pme; int nkf1; int ngrid_a; int *iatemp; int *nc; int **igrid_a; int **igrid_now; double *frac_a; double *aj; double **ua; double **mn_a; double **dmn_a; double **qgrid_now; double *qgrid; double *qgrid_scr; double *qgrid_tmp_real; double *qgrid_tmp_imag; double *bweight_tot; double *bw_r; } cpscr_atom_pme; } cpscr; struct communicate communicate; struct para_fft_pkg3d cp_sclr_fft_pkg3d_sm; struct para_fft_pkg3d cp_para_fft_pkg3d_sm; struct para_fft_pkg3d cp_sclr_fft_pkg3d_dens_cp_box; struct para_fft_pkg3d cp_para_fft_pkg3d_dens_cp_box; struct para_fft_pkg3d cp_sclr_fft_pkg3d_lg; struct para_fft_pkg3d cp_para_fft_pkg3d_lg; struct cp_comm_state_pkg { int num_proc; int myid; int nstate; int nstate_max; int ncoef; int nstate_proc; int nstate_proc_max; int nstate_ncoef_proc_max; int nstate_ncoef_proc; int icoef_start; int comm; int world; int ioff_therm_norm[3]; } cp_comm_state_pkg_up; struct cp_comm_state_pkg cp_comm_state_pkg_dn; struct vel_samp_cp { int ivelc_smpl_on; int ivelc_scal_on; int nvc_smpl; int nvcnhc_smpl; int nvc_scal; int iseed; int iauto_vc_scal_opt; double qseed; double vc_scal_tol; double div_scal; } vel_samp_cp; } *

variable_types: ip int

variable_types: ipart int

variable_types: is int

variable_types: iflag int

variable_types: ifirst int

variable_types: ichain int

variable_types: inhc int

variable_types: dt double

user_defined_types: struct bonded { struct bond bond; struct grp_bond_con grp_bond_con; struct grp_bond_watts grp_bond_watts; struct constrnt constrnt; struct bond_free bond_free; struct bend bend; struct bend_free bend_free; struct bend_bnd bend_bnd; struct tors tors; struct tors_free tors_free; struct rbar_sig_free rbar_sig_free; struct onfo onfo; struct ecor ecor; struct excl excl; struct intra_scr intra_scr; }

user_defined_types: struct general_data { struct simopts simopts; struct minopts minopts; struct ensopts ensopts; struct filenames filenames; struct statepoint statepoint; struct cell cell; struct timeinfo timeinfo; struct baro baro; struct par_rahman par_rahman; struct ptens ptens; struct stat_avg stat_avg; struct ewald ewald; struct para_fft_pkg3d pme_fft_pkg; struct para_fft_pkg3d pme_res_fft_pkg; int error_check_on; }

user_defined_types: struct cp { struct cpopts cpopts; struct cpcoeffs_info cpcoeffs_info; struct cpcoeffs_pos *cpcoeffs_pos; struct cptherm_info cptherm_info; struct cptherm_pos *cptherm_pos; struct electronic_properties electronic_properties; struct cpewald cpewald; struct cpconstrnt cpconstrnt; struct pseudo pseudo; struct cpscr cpscr; struct communicate communicate; struct para_fft_pkg3d cp_sclr_fft_pkg3d_sm; struct para_fft_pkg3d cp_para_fft_pkg3d_sm; struct para_fft_pkg3d cp_sclr_fft_pkg3d_dens_cp_box; struct para_fft_pkg3d cp_para_fft_pkg3d_dens_cp_box; struct para_fft_pkg3d cp_sclr_fft_pkg3d_lg; struct para_fft_pkg3d cp_para_fft_pkg3d_lg; struct cp_comm_state_pkg cp_comm_state_pkg_up; struct cp_comm_state_pkg cp_comm_state_pkg_dn; struct vel_samp_cp vel_samp_cp; }

user_defined_types: struct clatoms_tran { int pi_beads_proc; int pi_atm_proc; int pi_atm_proc_use; int pi_proc_rem; int nwork; int *sendcounts; int *senddspls; int *ifax; double *rat1_stag; double *path_eig; double *work; double *work3; double *x_trans; double *x_temp; double *xt_temp; }

user_defined_types: struct atommaps { int nmol_typ; int nres_typ; int natm_typ; int nfreeze; int nfreeze_mall; int natm_typ_mall; int nres_typ_max; int nres_max; int nres_tot; int nres_sum; int pimd_freez_typ; char (*atm_typ)[50]; char (*res_typ)[50]; char (*mol_typ)[50]; int *nmol_jmol_typ; int *nres_1mol_jmol_typ; int *jatm_jmol_typ_strt; int *jres_jmol_typ_strt; int *ires_typ_jres_jmol_typ; int *jatm_jres_1mol_jmol_typ_strt; int *natm_1mol_jmol_typ; int *natm_jres_jmol_typ; int *nfree_1mol_jmol_typ; int *nfree_jres_jmol_typ; int *icons_jmol_typ; int *icons_jres_jmol_typ; int *natm_jmol_typ; int *iatm_mol_typ; int *iatm_res_typ; int *iatm_atm_typ; int *iatm_atm_typ_nl; int *iatm_atm_typ_nl_rev; int *imap_atm_typ_nl; int *imap_atm_typ_nl_gh; int *iatm_mol_num; int *iatm_proc_num; int *iatm_res_num; int *ighost_flag; int *freeze_flag; int *freeze_map; int *atom_label; int *cp_atm_lst; }

user_defined_types: struct therm_info { int num_nhc; int len_nhc; int nres_nhc; int nyosh_nhc; int therm_typ; int num_nhc_proc; int num_nhc_share; int mytherm_start; double dt_nhc; int *inhc_x; int *itherm_nshare; double *ditherm_nshare_i; int *map_share; double *text_nhc; double *wdti; double **mass_nhc; }

user_defined_types: struct therm_pos { double **x_nhc; double x_nhc_tot; }

user_defined_types: struct vel_samp_class { int ivel_smpl_on; int ivel_scale_on; int nvx_smpl; int nvx_scale; int nvnhc_smpl; int iseed; double qseed; }

user_defined_types: struct energy_ctrl { int pme_on; int int_res_ter; int isep_vvdw; int iswit_vdw; int block_std_on; int iget_pe_real_inter_freq; int iget_pe_real_inter; int itime; int iget_full_inter; int iget_full_intra; int iget_full_pimd; }

user_defined_types: struct interact { int nsplin; int iswit_vdw; int dielectric_opt; int ishave_opt; int nter_typ; int nsplin_tot; int ninter_mall; int nsplin_mall_tot; int *inter_map_index; double dielectric_rheal; double dielectric_cut; double dielectric_eps; double brnch_root_skin; double skin; double brnch_root_cut; double rheal_res; double pten_inter_guess; double pten_kin_guess; double clong; double clong_res; double spread_now; double spread_lnk; double brnch_root_skin_lnk; double cutoff_max; double *cutoff; double *cutoff_res; double *cutti; double *cutskin; double *cutskin_res; double *cutskin_root; double *cutskin_root_res; double *vcut_coul; double *rmin_spl; double *dr_spl; double *cv0; double *cdv0; double *cv0_c; double *cdv0_c; }

user_defined_types: struct ewd_scr { double *q; double *x; double *fx; double *heli; double *cossc; double *fx2; double *temp; double *helr_now; }

user_defined_types: struct for_scr { int nlen; int nsplin_t; int num_brk; int intact; double wght_lnk; double wght_ter; double wght_ter_res; double wght_tra; double wght_tra_res; double wght_pimd; int *j_indext; int *i_indext2; int *j_lnk; int *j_index; int *num_brk_i; int *iexcl; int *index_atm; }

user_defined_types: struct part_mesh { int pme_on; int kmax_pme; int n_interp; int pme_res_on; int kmax_pme_res; int n_interp_res; int pme_para_opt; int nlen_pme; int nktot_pme; int ngrid_a; int nktot_pme_res; int ngrid_a_res; int ninterp_mall; int ninterp_tot_mall; int *iatemp; int *nc; int **igrid_a; int **igrid_now; double ecut; double ecut_res; double *bweight_tot_res; double *bweight_tot; double *qgrid; double *qgrid_scr; double *qgrid_tmp_real; double *qgrid_tmp_imag; double *frac_a; double *aj; double **ua; double **mn_a; double **dmn_a; double **qgrid_now; }

user_defined_types: struct surface { int isurf_on; int natm_typ; int nsplin_surf; int nsplin_tot; double zheal; double surface_height; double *surface_pot; double *surface_forc; double *zcut_off; double *dz_spl; double *dzi_spl; double *zmin_spl; char surface_type[50]; }

user_defined_types: struct communicate { int np_beads; int myid; int myid_bead_forc; int myid_bead; int myid_bead_prime; int myid_state; int myid_forc; int myid_forc_source; int myid_forc_target; int world; int comm_beads; int comm_beads_forc; int comm_states; int comm_forc; int comm_forc_source; int comm_forc_target; int comm_faux; }

user_defined_types: struct constrnt { int iconstrnt; int iroll; int max_iter; double tolshake; double tolratl; }

user_defined_types: struct electronic_properties { double *cp_elf_up; }

user_defined_types: struct cpconstrnt { double c_tolshake; double c_tolratl; double c_tolnorb; }

user_defined_types: struct cpscr { struct cpscr_loc cpscr_loc; struct cpscr_nonloc cpscr_nonloc; struct cpscr_rho cpscr_rho; struct cpscr_grho cpscr_grho; struct cpscr_ovmat cpscr_ovmat; struct cpscr_wave cpscr_wave; struct cpscr_therm cpscr_therm; struct cpscr_dual_pme cpscr_dual_pme; struct cpscr_atom_pme cpscr_atom_pme; }

user_defined_types: struct verlist { int iver_init; int iver_fill; int nolst_ver_update; int jver_pad; int nmem_min_lst; int nver_lst; int nver_lst_res; int nver_lst_now; int nver_lst_now_res; int *nter; int *jter; int *jver_off; int *nter_res; int *jter_res; int *jver_off_res; double mem_safe; }

user_defined_types: struct lnklist { int ilnk_init; int lnk_for_odd; int ncell_div_avg; int lnk_excl_safe; int lnk_vol_safe; int ncell_a; int natm_cell_max; int lnk_list_dim; int nshft_lnk; int nshft_lnk_res; double vol_lnk_map; double rcut_max; int *lnk_list; int *ishft_a; int *iexl_chk; int *ishft_a_res; int *iexl_chk_res; int *natm_cell; double *shft_wght; double *shft_wght_res; double *hmat_lnk; }

user_defined_types: struct brnch_root { int nbrnch_tot; int nroot_tot; int natm_add_tot; int nbrnch_root_max; double brnch_root_dist_max; double cutdif_min_brnch_root; double cutdif_min_brnch_brnch; double cutdif_min_brnch_root_res; double cutdif_min_brnch_brnch_res; double r2_nocheck_dist; double r2_nocheck_dist_res; double cutskin_bb_min; double cutskin_bb_min_res; int *brnch_atm_list; int *brnch_atm_root; int *root_atm_list; int *root_atm_map; int *brnch_atm_map; int *nbrnch_of_root_big; int *nbrnch_of_root; int **ibrnch_of_root; int *natm_add; int *iatm_add; int *iatm_add_off; }

user_defined_types: struct class_plimpton_ind { int num_proc_source; int num_proc_target; int myid_source; int myid_target; int natoms_tot; int *index_src; int *index_src_even; int *index_src_odd; int *index_trg; int *index_trg_even; int *index_trg_odd; int *displs_atm_trg; int *displs_atm_src; int *src_odd_end; int *src_even_end; int *trg_odd_end; int *trg_even_end; int *src_odd_begin; int *src_even_begin; int *trg_odd_begin; int *trg_even_begin; int my_src_odd_counts; int my_src_even_counts; int my_trg_odd_counts; int my_trg_even_counts; int *my_src_odd; int *my_src_even; int *my_trg_odd; int *my_trg_even; int **jmax; int *jmin; int **imax; int source; int target; }

user_defined_types: struct cpscr_loc { double *vextr; double *vextr_dens_cp_box; double *dvextr; }

user_defined_types: struct cpscr_wave { double *zfft; int zfft_mall_size; double *cre_up; double *cre_dn; }

user_defined_types: struct cpscr_therm { double *coef_kin; double *sc_cp; }

user_defined_types: struct therm_scr { double *sc; double *atm_kin; }


decompiled_code:
__int64 __fastcall build_grp_comm_outer(unsigned int a1, int a2, int a3, unsigned int a4, unsigned int *a5, unsigned int *a6, unsigned int a7)
{
__int64 v8; // rdx
unsigned int v10; // er12
unsigned int v11; // edx
unsigned int *v12; // rax
char v16[4]; // [rsp+20h] [rbp-48h] BYREF
unsigned int v17; // [rsp+24h] [rbp-44h] BYREF
unsigned int v18; // [rsp+28h] [rbp-40h] BYREF
int v19[15]; // [rsp+2Ch] [rbp-3Ch] BYREF

v8 = (unsigned int)(a2 * a3);
if ( (_DWORD)v8 != a1 )
{
printf("Incorrect number of procs %d vs %d\n", a1, v8);
Finalize();
exit(0);
}
Comm_group(a7, v19);
if ( a3 > 0 )
{
v10 = 0;
do
{
v11 = v10;
v12 = a6;
if ( a2 > 0 )
{
do
{
*v12 = v11;
v11 += a3;
++v12;
}
while ( v12 != &a6[a2 - 1 + 1] );
}
Group_incl((unsigned int)v19[0], (unsigned int)a2, a6, &v18);
Barrier(a7);
if ( (int)a4 % a3 == v10 )
{
Comm_create(a7, v18, &v17);
Barrier(a7);
Comm_rank(v17, a5);
if ( v10 + *a5 * a3 != a4 )
{
puts("Problems in building outer communicator");
printf("ID expected %d not equal to ID given %d\n", a4, v10 + *a5 * a3);
printf("with myid_out %d and myid_in %d\n", *a5, v10);
}
}
else
{
Comm_create(a7, v18, v16);
Barrier(a7);
}
Group_free(&v18);
Barrier(a7);
++v10;
}
while ( a3 != v10 );
}
Group_free(v19);
return v17;
}

canonical_decompiled_code:
__int64 __fastcall func0(unsigned int a1, int a2, int a3, unsigned int a4, unsigned int *a5, unsigned int *a6, unsigned int a7)
{
__int64 v8; // rdx
unsigned int v10; // er12
unsigned int v11; // edx
unsigned int *v12; // rax
char v16[4]; // [rsp+20h] [rbp-48h] BYREF
unsigned int v17; // [rsp+24h] [rbp-44h] BYREF
unsigned int v18; // [rsp+28h] [rbp-40h] BYREF
int v19[15]; // [rsp+2Ch] [rbp-3Ch] BYREF

v8 = (unsigned int)(a2 * a3);
if ( (_DWORD)v8 != a1 )
{
printf("Incorrect number of procs %d vs %d\n", a1, v8);
Finalize();
exit(0);
}
Comm_group(a7, v19);
if ( a3 > 0 )
{
v10 = 0;
do
{
v11 = v10;
v12 = a6;
if ( a2 > 0 )
{
do
{
*v12 = v11;
v11 += a3;
++v12;
}
while ( v12 != &a6[a2 - 1 + 1] );
}
Group_incl((unsigned int)v19[0], (unsigned int)a2, a6, &v18);
Barrier(a7);
if ( (int)a4 % a3 == v10 )
{
Comm_create(a7, v18, &v17);
Barrier(a7);
Comm_rank(v17, a5);
if ( v10 + *a5 * a3 != a4 )
{
puts("Problems in building outer communicator");
printf("ID expected %d not equal to ID given %d\n", a4, v10 + *a5 * a3);
printf("with myid_out %d and myid_in %d\n", *a5, v10);
}
}
else
{
Comm_create(a7, v18, v16);
Barrier(a7);
}
Group_free(&v18);
Barrier(a7);
++v10;
}
while ( a3 != v10 );
}
Group_free(v19);
return v17;
}

original_code:
int build_grp_comm_outer(int np, int np_outer, int np_inner, int myid,
                              int *myid_outer,int *ranks, int world)
{
  int iii;
  int myid_inner;
  int i,j,k;
  int ngroup;
  int world_group,incl_group;
  int gen_comm;
  int junk_comm;
  myid_inner = (myid % np_inner);
  if(np_outer*np_inner != np){
    printf("Incorrect number of procs %d vs %d\n",np,np_outer*np_inner);
    Finalize();
    exit(0);
  }
  Comm_group(world,&world_group);
  for(j=0;j < np_inner;j++){
     for(i=0;i<np_outer;i++){
       ranks[i] = np_inner*i+j;
     }
     Group_incl(world_group,np_outer,ranks,&incl_group);
     Barrier(world);
     if(myid_inner==j){
       Comm_create(world,incl_group,&gen_comm);
       Barrier(world);
       Comm_rank(gen_comm,myid_outer);
       if(myid!= np_inner*(*myid_outer) + myid_inner){
         printf("Problems in building outer communicator\n");
         printf("ID expected %d not equal to ID given %d\n",myid,
                         np_inner*(*myid_outer) + myid_inner);
         printf("with myid_out %d and myid_in %d\n",*myid_outer,myid_inner);
       }
     }else{
       Comm_create(world,incl_group,&junk_comm);
       Barrier(world);
     }
     Group_free(&incl_group);
     Barrier(world);
   }
   Group_free(&world_group);
   return gen_comm;
  }

canonical_original_code:
int build_grp_comm_outer(int np, int np_outer, int np_inner, int myid, int *myid_outer, int *ranks, int world)
{
  int iii;
  int myid_inner;
  int i; int j; int k;
  int ngroup;
  int world_group; int incl_group;
  int gen_comm;
  int junk_comm;
  myid_inner = (myid % np_inner);
  if(np_outer*np_inner != np){
    printf("Incorrect number of procs %d vs %d\n",np,np_outer*np_inner);
    Finalize();
    exit(0);
  }
  Comm_group(world,&world_group);
  for(j=0;j < np_inner;j++){
     for(i=0;i<np_outer;i++){
       ranks[i] = np_inner*i+j;
     }
     Group_incl(world_group,np_outer,ranks,&incl_group);
     Barrier(world);
     if(myid_inner==j){
       Comm_create(world,incl_group,&gen_comm);
       Barrier(world);
       Comm_rank(gen_comm,myid_outer);
       if(myid!= np_inner*(*myid_outer) + myid_inner){
         printf("Problems in building outer communicator\n");
         printf("ID expected %d not equal to ID given %d\n",myid,
                         np_inner*(*myid_outer) + myid_inner);
         printf("with myid_out %d and myid_in %d\n",*myid_outer,myid_inner);
       }
     }else{
       Comm_create(world,incl_group,&junk_comm);
       Barrier(world);
     }
     Group_free(&incl_group);
     Barrier(world);
   }
   Group_free(&world_group);
   return gen_comm;
  }

variable_types: np int

variable_types: myid int

variable_types:
ranks
int *

variable_types: world int

variable_types: i int

variable_types: j int

variable_types: k int

variable_types: ngroup int

return_type: int


decompiled_code:
__int64 __fastcall build_grp_comm_inner(unsigned int a1, int a2, int a3, unsigned int a4, unsigned int *a5, _DWORD *a6, unsigned int a7)
{
unsigned int v7; // esi
int v10; // ebx
int v11; // er14
unsigned int v12; // er13
_DWORD *v13; // rdx
int v14; // eax
char v19[4]; // [rsp+20h] [rbp-48h] BYREF
unsigned int v20; // [rsp+24h] [rbp-44h] BYREF
unsigned int v21; // [rsp+28h] [rbp-40h] BYREF
int v22[15]; // [rsp+2Ch] [rbp-3Ch] BYREF

v7 = a3 * a2;
if ( v7 != a1 )
{
printf("Incorrect number of procs %d vs %d\n", a1, v7);
Finalize();
exit(0);
}
Comm_group(a7, v22);
if ( a2 > 0 )
{
v10 = a3;
v11 = 0;
v12 = 0;
do
{
v13 = a6;
v14 = v11;
if ( a3 > 0 )
{
do
*v13++ = v14++;
while ( v14 != v10 );
}
Group_incl((unsigned int)v22[0], (unsigned int)a3, a6, &v21);
Barrier(a7);
if ( (int)a4 / a3 == v12 )
{
Comm_create(a7, v21, &v20);
Barrier(a7);
Comm_rank(v20, a5);
if ( *a5 + v11 != a4 )
{
puts("Problems in building inner communicator");
printf("ID expected %d not equal to ID given %d\n", a4, *a5 + v11);
printf("with myid_out %d and myid_in %d\n", v12, *a5);
}
}
else
{
Comm_create(a7, v21, v19);
Barrier(a7);
}
Group_free(&v21);
Barrier(a7);
++v12;
v11 += a3;
v10 += a3;
}
while ( a2 != v12 );
}
Group_free(v22);
return v20;
}

canonical_decompiled_code:
__int64 __fastcall func1(unsigned int a1, int a2, int a3, unsigned int a4, unsigned int *a5, _DWORD *a6, unsigned int a7)
{
unsigned int v7; // esi
int v10; // ebx
int v11; // er14
unsigned int v12; // er13
_DWORD *v13; // rdx
int v14; // eax
char v19[4]; // [rsp+20h] [rbp-48h] BYREF
unsigned int v20; // [rsp+24h] [rbp-44h] BYREF
unsigned int v21; // [rsp+28h] [rbp-40h] BYREF
int v22[15]; // [rsp+2Ch] [rbp-3Ch] BYREF

v7 = a3 * a2;
if ( v7 != a1 )
{
printf("Incorrect number of procs %d vs %d\n", a1, v7);
Finalize();
exit(0);
}
Comm_group(a7, v22);
if ( a2 > 0 )
{
v10 = a3;
v11 = 0;
v12 = 0;
do
{
v13 = a6;
v14 = v11;
if ( a3 > 0 )
{
do
*v13++ = v14++;
while ( v14 != v10 );
}
Group_incl((unsigned int)v22[0], (unsigned int)a3, a6, &v21);
Barrier(a7);
if ( (int)a4 / a3 == v12 )
{
Comm_create(a7, v21, &v20);
Barrier(a7);
Comm_rank(v20, a5);
if ( *a5 + v11 != a4 )
{
puts("Problems in building inner communicator");
printf("ID expected %d not equal to ID given %d\n", a4, *a5 + v11);
printf("with myid_out %d and myid_in %d\n", v12, *a5);
}
}
else
{
Comm_create(a7, v21, v19);
Barrier(a7);
}
Group_free(&v21);
Barrier(a7);
++v12;
v11 += a3;
v10 += a3;
}
while ( a2 != v12 );
}
Group_free(v22);
return v20;
}

original_code:
int build_grp_comm_inner(int np, int np_outer, int np_inner, int myid,
                              int *myid_inner,int *ranks, int world)
{
  int iii;
  int myid_outer;
  int i,j,k;
  int world_group,incl_group;
  int gen_comm;
  int junk_comm;
  myid_outer = (myid / np_inner);
  if(np_outer*np_inner != np){
    printf("Incorrect number of procs %d vs %d\n",np,np_outer*np_inner);
    Finalize();
    exit(0);
  }
  Comm_group(world,&world_group);
  for(j=0;j < np_outer;j++){
     for(i=0;i<np_inner;i++){
       ranks[i] = np_inner*j+i;
     }
     Group_incl(world_group,np_inner,ranks,&incl_group);
     Barrier(world);
     if(myid_outer==j){
       Comm_create(world,incl_group,&gen_comm);
       Barrier(world);
       Comm_rank(gen_comm,myid_inner);
       if(myid!= myid_outer*np_inner + *myid_inner){
         printf("Problems in building inner communicator\n");
         printf("ID expected %d not equal to ID given %d\n",myid,
                    myid_outer*np_inner + *myid_inner);
         printf("with myid_out %d and myid_in %d\n",myid_outer,*myid_inner);
       }
     }else{
       Comm_create(world,incl_group,&junk_comm);
       Barrier(world);
     }
     Group_free(&incl_group);
     Barrier(world);
   }
   Group_free(&world_group);
   return gen_comm;
  }

canonical_original_code:
int build_grp_comm_inner(int np, int np_outer, int np_inner, int myid, int *myid_inner, int *ranks, int world)
{
  int iii;
  int myid_outer;
  int i; int j; int k;
  int world_group; int incl_group;
  int gen_comm;
  int junk_comm;
  myid_outer = (myid / np_inner);
  if(np_outer*np_inner != np){
    printf("Incorrect number of procs %d vs %d\n",np,np_outer*np_inner);
    Finalize();
    exit(0);
  }
  Comm_group(world,&world_group);
  for(j=0;j < np_outer;j++){
     for(i=0;i<np_inner;i++){
       ranks[i] = np_inner*j+i;
     }
     Group_incl(world_group,np_inner,ranks,&incl_group);
     Barrier(world);
     if(myid_outer==j){
       Comm_create(world,incl_group,&gen_comm);
       Barrier(world);
       Comm_rank(gen_comm,myid_inner);
       if(myid!= myid_outer*np_inner + *myid_inner){
         printf("Problems in building inner communicator\n");
         printf("ID expected %d not equal to ID given %d\n",myid,
                    myid_outer*np_inner + *myid_inner);
         printf("with myid_out %d and myid_in %d\n",myid_outer,*myid_inner);
       }
     }else{
       Comm_create(world,incl_group,&junk_comm);
       Barrier(world);
     }
     Group_free(&incl_group);
     Barrier(world);
   }
   Group_free(&world_group);
   return gen_comm;
  }

variable_types: iii int


original_code:
void build_communicate_groups(COMMUNICATE *communicate,int cp_on)
    {
  int MPI_INT = 1;
  int MPI_DOUBLE = 1;
  int MPI_CHAR = 1;
  int MPI_MAX = 1;
  int MPI_SUM = 1;
  int MPI_ANY_TAG = 1;
  int MPI_ANY_SOURCE = 1;
  int *MPI_BOTTOM = {0};
   int myid = communicate->myid;
   int np_states = communicate->np_states;
   int np_beads = communicate->np_beads;
   int np = communicate->np;
   int np_forc = communicate->np_forc;
   int np_forc_src = communicate->np_forc_src;
   int np_forc_trg = communicate->np_forc_trg;
   int i,ii,loop,iii,ntemp,idiv,irem,icase,numcomm_bead;
   int *ranks;
   int world;
   int comm_forc;
   int excl_group,temp;
   numcomm_bead = np/np_beads;
   if(numcomm_bead==0){numcomm_bead=1;}
   ranks = (int *) cmalloc(1000*sizeof(int));
   Comm_dup(communicate->world,&(world));
   Barrier(world);
   if(cp_on==1){icase=1;}
   if(cp_on==0){icase=2;}
   switch(icase){
     case 1:
        communicate->comm_beads =
             build_grp_comm_outer(np,np_beads,np_states,myid,
                                &(communicate->myid_bead),ranks,world);
     break;
     case 2:
        communicate->comm_beads =
             build_grp_comm_outer(np,np_beads,np_forc,myid,
                                &(communicate->myid_bead),ranks,world);
     break;
   }
   Comm_dup(communicate->comm_beads,&(communicate->comm_beads_forc));
   communicate->myid_bead_forc = communicate->myid_bead;
  if((cp_on==1) && (np_forc==1)) {icase=1;}
  if((cp_on==1) && (np_forc==np_states)) {icase=2;}
  if(cp_on==0) {icase=3;}
  switch(icase){
   case 1:
      ranks[0] = myid;
      Comm_group(world,&excl_group);
      Group_incl(excl_group,np_forc,ranks,&temp);
      Comm_create(world,temp,&communicate->comm_forc);
      Comm_dup(communicate->comm_forc,&(communicate->comm_forc_source));
      Comm_dup(communicate->comm_forc,&(communicate->comm_forc_target));
      communicate->myid_forc = 0;
      communicate->myid_forc_source = 0;
      communicate->myid_forc_target = 0;
      Group_free(&excl_group);
      communicate->comm_states =
           build_grp_comm_inner(np,np_beads,np_states,myid,
                              &(communicate->myid_state),ranks,world);
      communicate->myid_bead_prime = communicate->myid_bead;
      if(communicate->myid_state!=0){
        communicate->myid_bead = communicate->np_beads;
      }
     break;
   case 2:
      communicate->comm_states =
           build_grp_comm_inner(np,np_beads,np_states,myid,
                              &(communicate->myid_state),ranks,world);
       communicate->myid_forc = communicate->myid_state;
       Comm_dup(communicate->comm_states,&(communicate->comm_forc));
       Comm_dup(communicate->comm_states,&(comm_forc));
      communicate->comm_forc_target =
          build_grp_comm_outer(np_forc,np_forc_trg,np_forc_src,
                   communicate->myid_forc,&(communicate->myid_forc_target),
                   ranks,comm_forc);
      communicate->comm_forc_source =
          build_grp_comm_inner(np_forc,np_forc_trg,np_forc_src,
                   communicate->myid_forc,&(communicate->myid_forc_source),
                   ranks,comm_forc);
      communicate->myid_bead_prime = communicate->myid_bead;
      if(communicate->myid_state!=0){
        communicate->myid_bead = communicate->np_beads;
      }
     break;
   case 3:
      ranks[0] = myid;
      Comm_group(world,&excl_group);
      Group_incl(excl_group,np_states,ranks,&temp);
      Comm_create(world,temp,&communicate->comm_states);
      communicate->myid_state = 0;
      Group_free(&excl_group);
      communicate->comm_forc =
           build_grp_comm_inner(np,np_beads,np_forc,myid,
                              &(communicate->myid_forc),ranks,world);
      Comm_dup(communicate->comm_forc,&(comm_forc));
      communicate->comm_forc_target =
          build_grp_comm_outer(np_forc,np_forc_trg,np_forc_src,
                   communicate->myid_forc,&(communicate->myid_forc_target),
                   ranks,comm_forc);
      communicate->comm_forc_source =
          build_grp_comm_inner(np_forc,np_forc_trg,np_forc_src,
                   communicate->myid_forc,&(communicate->myid_forc_source),
                   ranks,comm_forc);
      communicate->myid_bead_prime = communicate->myid_bead;
      if(communicate->myid_forc!=0){
        communicate->myid_bead = communicate->np_beads;
      }
   break;
 }
      cfree(&ranks[0]);
   }

canonical_original_code:
void build_communicate_groups(struct communicate *communicate, int cp_on)
    {
  int MPI_INT = 1;
  int MPI_DOUBLE = 1;
  int MPI_CHAR = 1;
  int MPI_MAX = 1;
  int MPI_SUM = 1;
  int MPI_ANY_TAG = 1;
  int MPI_ANY_SOURCE = 1;
  int *MPI_BOTTOM = {0};
   int myid = communicate->myid;
   int np_states = communicate->np_states;
   int np_beads = communicate->np_beads;
   int np = communicate->np;
   int np_forc = communicate->np_forc;
   int np_forc_src = communicate->np_forc_src;
   int np_forc_trg = communicate->np_forc_trg;
   int i; int ii; int loop; int iii; int ntemp; int idiv; int irem; int icase; int numcomm_bead;
   int *ranks;
   int world;
   int comm_forc;
   int excl_group; int temp;
   numcomm_bead = np/np_beads;
   if(numcomm_bead==0){numcomm_bead=1;}
   ranks = (int *) cmalloc(1000*sizeof(int));
   Comm_dup(communicate->world,&(world));
   Barrier(world);
   if(cp_on==1){icase=1;}
   if(cp_on==0){icase=2;}
   switch(icase){
     case 1:
        communicate->comm_beads =
             build_grp_comm_outer(np,np_beads,np_states,myid,
                                &(communicate->myid_bead),ranks,world);
     break;
     case 2:
        communicate->comm_beads =
             build_grp_comm_outer(np,np_beads,np_forc,myid,
                                &(communicate->myid_bead),ranks,world);
     break;
   }
   Comm_dup(communicate->comm_beads,&(communicate->comm_beads_forc));
   communicate->myid_bead_forc = communicate->myid_bead;
  if((cp_on==1) && (np_forc==1)) {icase=1;}
  if((cp_on==1) && (np_forc==np_states)) {icase=2;}
  if(cp_on==0) {icase=3;}
  switch(icase){
   case 1:
      ranks[0] = myid;
      Comm_group(world,&excl_group);
      Group_incl(excl_group,np_forc,ranks,&temp);
      Comm_create(world,temp,&communicate->comm_forc);
      Comm_dup(communicate->comm_forc,&(communicate->comm_forc_source));
      Comm_dup(communicate->comm_forc,&(communicate->comm_forc_target));
      communicate->myid_forc = 0;
      communicate->myid_forc_source = 0;
      communicate->myid_forc_target = 0;
      Group_free(&excl_group);
      communicate->comm_states =
           build_grp_comm_inner(np,np_beads,np_states,myid,
                              &(communicate->myid_state),ranks,world);
      communicate->myid_bead_prime = communicate->myid_bead;
      if(communicate->myid_state!=0){
        communicate->myid_bead = communicate->np_beads;
      }
     break;
   case 2:
      communicate->comm_states =
           build_grp_comm_inner(np,np_beads,np_states,myid,
                              &(communicate->myid_state),ranks,world);
       communicate->myid_forc = communicate->myid_state;
       Comm_dup(communicate->comm_states,&(communicate->comm_forc));
       Comm_dup(communicate->comm_states,&(comm_forc));
      communicate->comm_forc_target =
          build_grp_comm_outer(np_forc,np_forc_trg,np_forc_src,
                   communicate->myid_forc,&(communicate->myid_forc_target),
                   ranks,comm_forc);
      communicate->comm_forc_source =
          build_grp_comm_inner(np_forc,np_forc_trg,np_forc_src,
                   communicate->myid_forc,&(communicate->myid_forc_source),
                   ranks,comm_forc);
      communicate->myid_bead_prime = communicate->myid_bead;
      if(communicate->myid_state!=0){
        communicate->myid_bead = communicate->np_beads;
      }
     break;
   case 3:
      ranks[0] = myid;
      Comm_group(world,&excl_group);
      Group_incl(excl_group,np_states,ranks,&temp);
      Comm_create(world,temp,&communicate->comm_states);
      communicate->myid_state = 0;
      Group_free(&excl_group);
      communicate->comm_forc =
           build_grp_comm_inner(np,np_beads,np_forc,myid,
                              &(communicate->myid_forc),ranks,world);
      Comm_dup(communicate->comm_forc,&(comm_forc));
      communicate->comm_forc_target =
          build_grp_comm_outer(np_forc,np_forc_trg,np_forc_src,
                   communicate->myid_forc,&(communicate->myid_forc_target),
                   ranks,comm_forc);
      communicate->comm_forc_source =
          build_grp_comm_inner(np_forc,np_forc_trg,np_forc_src,
                   communicate->myid_forc,&(communicate->myid_forc_source),
                   ranks,comm_forc);
      communicate->myid_bead_prime = communicate->myid_bead;
      if(communicate->myid_forc!=0){
        communicate->myid_bead = communicate->np_beads;
      }
   break;
 }
      cfree(&ranks[0]);
   }

variable_types: struct communicate { int np_beads; int myid; int myid_bead_forc; int myid_bead; int myid_bead_prime; int myid_state; int myid_forc; int myid_forc_source; int myid_forc_target; int world; int comm_beads; int comm_beads_forc; int comm_states; int comm_forc; int comm_forc_source; int comm_forc_target; int comm_faux; } *

variable_types: ii int

variable_types: loop int

variable_types: ntemp int

variable_types: idiv int

variable_types: irem int

variable_types: icase int

variable_types: temp int


original_code:
void convert_pimd_force_stag_par(
              CLATOMS_INFO *clatoms_info, CLATOMS_POS *clatoms_pos,
              CLATOMS_TRAN *clatoms_tran, COMMUNICATE *communicate)
{
  int ip,ipart,ip1,iopt,iuse,ioff,ipart_1,ipart_ip,ipart_ip1;
  int pi_beads = clatoms_info->pi_beads;
  int pi_atm_proc_use = clatoms_tran->pi_atm_proc_use;
  int natm_tot = clatoms_info->natm_tot;
  double *rat1 = clatoms_tran->rat1_stag;
  double *fxu = clatoms_tran->x_temp;
  double *fyu = clatoms_tran->y_temp;
  double *fzu = clatoms_tran->z_temp;
  if(pi_beads!=1){
    iopt = 2;
    pimd_trans_comm_fwd(clatoms_info,clatoms_pos,clatoms_tran,
                                                communicate,iopt);
    ioff = 0.0;
    for(ipart=1;ipart<=pi_atm_proc_use;ipart++){
      ipart_1 = ioff+1;
      for(ipart_ip=(2+ioff);ipart_ip<=(pi_beads+ioff);ipart_ip++){
        fxu[ipart_1] += fxu[ipart_ip];
        fyu[ipart_1] += fyu[ipart_ip];
        fzu[ipart_1] += fzu[ipart_ip];
      }
      ioff += pi_beads;
    }
    ioff = 0;
    for(ipart=1;ipart<=pi_atm_proc_use;ipart++){
      for(ip=2;ip<=pi_beads-1;ip++){
        ipart_ip1 = ioff + ip + 1;
        ipart_ip = ioff+ip;
        fxu[ipart_ip1] += (rat1[ip]*fxu[ipart_ip]);
        fyu[ipart_ip1] += (rat1[ip]*fyu[ipart_ip]);
        fzu[ipart_ip1] += (rat1[ip]*fzu[ipart_ip]);
      }
      ioff += pi_beads;
    }
    pimd_trans_comm_bck(clatoms_info,clatoms_pos,clatoms_tran,
                                                communicate,iopt);
  }
}

canonical_original_code:
void convert_pimd_force_stag_par(struct clatoms_info *clatoms_info, struct clatoms_pos *clatoms_pos, struct clatoms_tran *clatoms_tran, struct communicate *communicate)
{
  int ip; int ipart; int ip1; int iopt; int iuse; int ioff; int ipart_1; int ipart_ip; int ipart_ip1;
  int pi_beads = clatoms_info->pi_beads;
  int pi_atm_proc_use = clatoms_tran->pi_atm_proc_use;
  int natm_tot = clatoms_info->natm_tot;
  double *rat1 = clatoms_tran->rat1_stag;
  double *fxu = clatoms_tran->x_temp;
  double *fyu = clatoms_tran->y_temp;
  double *fzu = clatoms_tran->z_temp;
  if(pi_beads!=1){
    iopt = 2;
    pimd_trans_comm_fwd(clatoms_info,clatoms_pos,clatoms_tran,
                                                communicate,iopt);
    ioff = 0.0;
    for(ipart=1;ipart<=pi_atm_proc_use;ipart++){
      ipart_1 = ioff+1;
      for(ipart_ip=(2+ioff);ipart_ip<=(pi_beads+ioff);ipart_ip++){
        fxu[ipart_1] += fxu[ipart_ip];
        fyu[ipart_1] += fyu[ipart_ip];
        fzu[ipart_1] += fzu[ipart_ip];
      }
      ioff += pi_beads;
    }
    ioff = 0;
    for(ipart=1;ipart<=pi_atm_proc_use;ipart++){
      for(ip=2;ip<=pi_beads-1;ip++){
        ipart_ip1 = ioff + ip + 1;
        ipart_ip = ioff+ip;
        fxu[ipart_ip1] += (rat1[ip]*fxu[ipart_ip]);
        fyu[ipart_ip1] += (rat1[ip]*fyu[ipart_ip]);
        fzu[ipart_ip1] += (rat1[ip]*fzu[ipart_ip]);
      }
      ioff += pi_beads;
    }
    pimd_trans_comm_bck(clatoms_info,clatoms_pos,clatoms_tran,
                                                communicate,iopt);
  }
}

variable_types: struct clatoms_info { int natm_tot; int pi_beads; int pi_beads_proc; int pi_beads_proc_st; int pi_beads_proc_end; int nfree; int nfree_pimd; int nchrg; int pi_beads_full_ter; int pi_beads_res_ter; int pi_beads_full_tra; int pi_beads_res_tra; int cg_reset_flag; int natm_mall; int nchrg_mall; int hess_calc; int natm_proc; int N_H2; int i_H2_start; int nab_initio; int myatm_start; double gamma_adb; double wght_pimd; double pi_temperature; double pi_beads_full_ter_wght; double pi_beads_res_ter_wght; double pi_beads_full_tra_wght; double pi_beads_res_tra_wght; double rcut_spread; double mass_sc_fact; int *ip_lab; int *ichrg; int *cp_vlnc_up; int *cp_atm_flag; double *mass; double *q; double *alp_pol; double *b_neut; double *roll_sc; double *text_atm; double *text_mol; double *xold; double *prekf; double *xmod; double alp_ewd; } *

variable_types: struct clatoms_pos { double *mass; double *x; double *vx; double *fx; double *fxt; double *fxm; double *hess_xx; } *

variable_types: struct clatoms_tran { int pi_beads_proc; int pi_atm_proc; int pi_atm_proc_use; int pi_proc_rem; int nwork; int *sendcounts; int *senddspls; int *ifax; double *rat1_stag; double *path_eig; double *work; double *work3; double *x_trans; double *x_temp; double *xt_temp; } *

variable_types: ip int

variable_types: ipart int

variable_types: iopt int

variable_types: iuse int

variable_types: ioff int

variable_types:
fxu
double *

variable_types:
fyu
double *

variable_types:
fzu
double *


original_code:
void convert_pimd_mode_stag_par(
              CLATOMS_INFO *clatoms_info, CLATOMS_POS *clatoms_pos,
              CLATOMS_TRAN *clatoms_tran, COMMUNICATE *communicate)
{
  int ip,ipart,ip1,iopt,ioff,ipart_1,ipart_ip,ipart_ip1;
  int pi_beads = clatoms_info->pi_beads;
  int pi_atm_proc_use = clatoms_tran->pi_atm_proc_use;
  int natm_tot = clatoms_info->natm_tot;
  double *rat1 = clatoms_tran->rat1_stag;
  double *rat2 = clatoms_tran->rat2_stag;
  double *xu = clatoms_tran->x_temp;
  double *yu = clatoms_tran->y_temp;
  double *zu = clatoms_tran->z_temp;
  double xstar,ystar,zstar;
  if(pi_beads!=1){
    iopt=1;
    pimd_trans_comm_fwd(clatoms_info,clatoms_pos,clatoms_tran,
                                                communicate,iopt);
    ioff=0;
    for(ipart=1;ipart<=pi_atm_proc_use;ipart++){
      ipart_1 = ioff+1;
      for(ip=2;ip<=pi_beads-1;ip++){
        ipart_ip = ioff+ip;
        ipart_ip1 = ioff+ip+1;
        xstar = rat1[ip]*xu[ipart_ip1] + rat2[ip]*xu[ipart_1];
        ystar = rat1[ip]*yu[ipart_ip1] + rat2[ip]*yu[ipart_1];
        zstar = rat1[ip]*zu[ipart_ip1] + rat2[ip]*zu[ipart_1];
        xu[ipart_ip] -= xstar;
        yu[ipart_ip] -= ystar;
        zu[ipart_ip] -= zstar;
      }
      ioff += pi_beads;
    }
      ip = pi_beads;
      for(ipart=1;ipart<=pi_atm_proc_use;ipart++){
        ioff=(ipart-1)*pi_beads;
        ipart_ip = ioff+ip;
        ipart_1 = ioff+1;
        xstar = rat1[ip]*xu[ipart_1] + rat2[ip]*xu[ipart_1];
        ystar = rat1[ip]*yu[ipart_1] + rat2[ip]*yu[ipart_1];
        zstar = rat1[ip]*zu[ipart_1] + rat2[ip]*zu[ipart_1];
        xu[ipart_ip] -= xstar;
        yu[ipart_ip] -= ystar;
        zu[ipart_ip] -= zstar;
      }
      pimd_trans_comm_bck(clatoms_info,clatoms_pos,clatoms_tran,
                                                communicate,iopt);
  }
}

canonical_original_code:
void convert_pimd_mode_stag_par(struct clatoms_info *clatoms_info, struct clatoms_pos *clatoms_pos, struct clatoms_tran *clatoms_tran, struct communicate *communicate)
{
  int ip; int ipart; int ip1; int iopt; int ioff; int ipart_1; int ipart_ip; int ipart_ip1;
  int pi_beads = clatoms_info->pi_beads;
  int pi_atm_proc_use = clatoms_tran->pi_atm_proc_use;
  int natm_tot = clatoms_info->natm_tot;
  double *rat1 = clatoms_tran->rat1_stag;
  double *rat2 = clatoms_tran->rat2_stag;
  double *xu = clatoms_tran->x_temp;
  double *yu = clatoms_tran->y_temp;
  double *zu = clatoms_tran->z_temp;
  double xstar; double ystar; double zstar;
  if(pi_beads!=1){
    iopt=1;
    pimd_trans_comm_fwd(clatoms_info,clatoms_pos,clatoms_tran,
                                                communicate,iopt);
    ioff=0;
    for(ipart=1;ipart<=pi_atm_proc_use;ipart++){
      ipart_1 = ioff+1;
      for(ip=2;ip<=pi_beads-1;ip++){
        ipart_ip = ioff+ip;
        ipart_ip1 = ioff+ip+1;
        xstar = rat1[ip]*xu[ipart_ip1] + rat2[ip]*xu[ipart_1];
        ystar = rat1[ip]*yu[ipart_ip1] + rat2[ip]*yu[ipart_1];
        zstar = rat1[ip]*zu[ipart_ip1] + rat2[ip]*zu[ipart_1];
        xu[ipart_ip] -= xstar;
        yu[ipart_ip] -= ystar;
        zu[ipart_ip] -= zstar;
      }
      ioff += pi_beads;
    }
      ip = pi_beads;
      for(ipart=1;ipart<=pi_atm_proc_use;ipart++){
        ioff=(ipart-1)*pi_beads;
        ipart_ip = ioff+ip;
        ipart_1 = ioff+1;
        xstar = rat1[ip]*xu[ipart_1] + rat2[ip]*xu[ipart_1];
        ystar = rat1[ip]*yu[ipart_1] + rat2[ip]*yu[ipart_1];
        zstar = rat1[ip]*zu[ipart_1] + rat2[ip]*zu[ipart_1];
        xu[ipart_ip] -= xstar;
        yu[ipart_ip] -= ystar;
        zu[ipart_ip] -= zstar;
      }
      pimd_trans_comm_bck(clatoms_info,clatoms_pos,clatoms_tran,
                                                communicate,iopt);
  }
}

variable_types: struct communicate { int np_beads; int myid; int myid_bead_forc; int myid_bead; int myid_bead_prime; int myid_state; int myid_forc; int myid_forc_source; int myid_forc_target; int world; int comm_beads; int comm_beads_forc; int comm_states; int comm_forc; int comm_forc_source; int comm_forc_target; int comm_faux; } *

variable_types:
xu
double *

variable_types:
yu
double *

variable_types:
zu
double *

variable_types: xstar double

variable_types: ystar double

variable_types: zstar double

user_defined_types: struct clatoms_info { int natm_tot; int pi_beads; int pi_beads_proc; int pi_beads_proc_st; int pi_beads_proc_end; int nfree; int nfree_pimd; int nchrg; int pi_beads_full_ter; int pi_beads_res_ter; int pi_beads_full_tra; int pi_beads_res_tra; int cg_reset_flag; int natm_mall; int nchrg_mall; int hess_calc; int natm_proc; int N_H2; int i_H2_start; int nab_initio; int myatm_start; double gamma_adb; double wght_pimd; double pi_temperature; double pi_beads_full_ter_wght; double pi_beads_res_ter_wght; double pi_beads_full_tra_wght; double pi_beads_res_tra_wght; double rcut_spread; double mass_sc_fact; int *ip_lab; int *ichrg; int *cp_vlnc_up; int *cp_atm_flag; double *mass; double *q; double *alp_pol; double *b_neut; double *roll_sc; double *text_atm; double *text_mol; double *xold; double *prekf; double *xmod; double alp_ewd; }

user_defined_types: struct clatoms_pos { double *mass; double *x; double *vx; double *fx; double *fxt; double *fxm; double *hess_xx; }

user_defined_types: struct clatoms_tran { int pi_beads_proc; int pi_atm_proc; int pi_atm_proc_use; int pi_proc_rem; int nwork; int *sendcounts; int *senddspls; int *ifax; double *rat1_stag; double *path_eig; double *work; double *work3; double *x_trans; double *x_temp; double *xt_temp; }