original_code:
void int_NVT_res(CLASS *class,BONDED *bonded,GENERAL_DATA *general_data)
{
    int i,ipart,iflag,ifirst=1;
    int exit_flag=0;
    double dt,dti2,dti,tol_glob;
    int ir_tra,ir_tor,ir_ter;
    int ix_now;
    int nres_tra,nres_tor,nres_ter;
    int int_res_ter,iii;
    int natm_tot,ichain,inhc;
    int iflag_mass = 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;
    natm_tot = class->clatoms_info.natm_tot;
    int_res_ter = general_data->timeinfo.int_res_ter;
    nres_tra = (general_data->timeinfo.nres_tra);
    nres_tor = (general_data->timeinfo.nres_tor);
    nres_ter = (general_data->timeinfo.nres_ter);
    dt = (general_data->timeinfo.dt);
    dti = dt/((double)(nres_ter*nres_tor*nres_tra));
    dti2 = dti/2.0;
    if(general_data->timeinfo.ix_respa==1){
      class->therm_info_class.dt_nhc = dt;
             }
    if(general_data->timeinfo.ix_respa==2){
      class->therm_info_class.dt_nhc = dt/((double)(nres_ter));
             }
    if(general_data->timeinfo.ix_respa==3){
      class->therm_info_class.dt_nhc = dt/((double)(nres_ter*nres_tor));
             }
    if(general_data->timeinfo.ix_respa==4){
      class->therm_info_class.dt_nhc = dt/((double)(
                                         nres_ter*nres_tor*nres_tra));
             }
    class->therm_info_class.dti_nhc = (class->therm_info_class.dt_nhc)/
                              ( (double)(class->therm_info_class.nres_nhc) );
    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);
    zero_constrt_iters(&(general_data->stat_avg));
    general_data->timeinfo.exit_flag = 0;
    for(ir_ter=1;ir_ter<=nres_ter;ir_ter++){
      for(ir_tor=1;ir_tor<=nres_tor;ir_tor++){
        for(ir_tra=1;ir_tra<=nres_tra;ir_tra++){
    int_0_to_dt2_nvt(class,bonded,general_data,ir_tra,ir_tor,ir_ter,dti);
          (class->energy_ctrl.iget_full_inter) = 0;
          (class->energy_ctrl.iget_res_inter) = 0;
          (class->energy_ctrl.iget_full_intra) = 0;
          (class->energy_ctrl.iget_res_intra) = 1;
          if((ir_ter==nres_ter)&&(ir_tor==nres_tor)&&(ir_tra==nres_tra))
             {(class->energy_ctrl.iget_full_inter) = 1;}
          if((int_res_ter==1)&&(ir_tor==nres_tor)&&(ir_tra==nres_tra))
             {(class->energy_ctrl.iget_res_inter) = 1;}
          if(ir_tra==nres_tra)
             {(class->energy_ctrl.iget_full_intra) = 1;}
          energy_control(class,bonded,general_data);
        int_dt2_to_dt_nvt(class,bonded,general_data,ir_tra,ir_tor,ir_ter,dti);
                         }
                       }
                     }
  iflag=0;
  if(anneal_opt == 1){
    anneal_class(class,ann_rate,iflag,iflag_mass,anneal_target_temp,&exit_flag);
    general_data->timeinfo.exit_flag = exit_flag;
  }
   int_final_class(class,bonded,general_data,iflag);
               }

canonical_original_code:
void int_NVT_res(struct class *class, struct bonded *bonded, struct general_data *general_data)
{
    int i; int ipart; int iflag; int ifirst = 1;
    int exit_flag = 0;
    double dt; double dti2; double dti; double tol_glob;
    int ir_tra; int ir_tor; int ir_ter;
    int ix_now;
    int nres_tra; int nres_tor; int nres_ter;
    int int_res_ter; int iii;
    int natm_tot; int ichain; int inhc;
    int iflag_mass = 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;
    natm_tot = class->clatoms_info.natm_tot;
    int_res_ter = general_data->timeinfo.int_res_ter;
    nres_tra = (general_data->timeinfo.nres_tra);
    nres_tor = (general_data->timeinfo.nres_tor);
    nres_ter = (general_data->timeinfo.nres_ter);
    dt = (general_data->timeinfo.dt);
    dti = dt/((double)(nres_ter*nres_tor*nres_tra));
    dti2 = dti/2.0;
    if(general_data->timeinfo.ix_respa==1){
      class->therm_info_class.dt_nhc = dt;
             }
    if(general_data->timeinfo.ix_respa==2){
      class->therm_info_class.dt_nhc = dt/((double)(nres_ter));
             }
    if(general_data->timeinfo.ix_respa==3){
      class->therm_info_class.dt_nhc = dt/((double)(nres_ter*nres_tor));
             }
    if(general_data->timeinfo.ix_respa==4){
      class->therm_info_class.dt_nhc = dt/((double)(
                                         nres_ter*nres_tor*nres_tra));
             }
    class->therm_info_class.dti_nhc = (class->therm_info_class.dt_nhc)/
                              ( (double)(class->therm_info_class.nres_nhc) );
    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);
    zero_constrt_iters(&(general_data->stat_avg));
    general_data->timeinfo.exit_flag = 0;
    for(ir_ter=1;ir_ter<=nres_ter;ir_ter++){
      for(ir_tor=1;ir_tor<=nres_tor;ir_tor++){
        for(ir_tra=1;ir_tra<=nres_tra;ir_tra++){
    int_0_to_dt2_nvt(class,bonded,general_data,ir_tra,ir_tor,ir_ter,dti);
          (class->energy_ctrl.iget_full_inter) = 0;
          (class->energy_ctrl.iget_res_inter) = 0;
          (class->energy_ctrl.iget_full_intra) = 0;
          (class->energy_ctrl.iget_res_intra) = 1;
          if((ir_ter==nres_ter)&&(ir_tor==nres_tor)&&(ir_tra==nres_tra))
             {(class->energy_ctrl.iget_full_inter) = 1;}
          if((int_res_ter==1)&&(ir_tor==nres_tor)&&(ir_tra==nres_tra))
             {(class->energy_ctrl.iget_res_inter) = 1;}
          if(ir_tra==nres_tra)
             {(class->energy_ctrl.iget_full_intra) = 1;}
          energy_control(class,bonded,general_data);
        int_dt2_to_dt_nvt(class,bonded,general_data,ir_tra,ir_tor,ir_ter,dti);
                         }
                       }
                     }
  iflag=0;
  if(anneal_opt == 1){
    anneal_class(class,ann_rate,iflag,iflag_mass,anneal_target_temp,&exit_flag);
    general_data->timeinfo.exit_flag = exit_flag;
  }
   int_final_class(class,bonded,general_data,iflag);
               }

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: 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: ipart int

variable_types: iflag int

variable_types: ifirst int

variable_types: dt double

variable_types: dti double

variable_types: ichain int

variable_types: inhc int

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 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 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 get_tvten_pimd(CLASS *class,GENERAL_DATA *general_data)
{
    int i,ipart,ip,iii;
    double akinet;
    double *ptens_tvten = general_data->ptens.tvten;
    double *clatoms_vx;
    double *clatoms_vy;
    double *clatoms_vz;
    double *clatoms_mass;
    int natm_tot = class->clatoms_info.natm_tot;
    int myid_bead = class->communicate.myid_bead;
    int pi_beads = class->clatoms_info.pi_beads;
    int pi_beads_proc = class->clatoms_info.pi_beads_proc;
    int pi_beads_proc_st = class->clatoms_info.pi_beads_proc_st;
    int myatm_start = class->clatoms_info.myatm_start;
    int myatm_end = class->clatoms_info.myatm_end;
  for(i=1;i<=9;i++){
    (ptens_tvten)[i] = 0.0;
            }
  if(pi_beads_proc_st==1){
    ip=1;
    clatoms_vx = class->clatoms_pos[ip].vx;
    clatoms_vy = class->clatoms_pos[ip].vy;
    clatoms_vz = class->clatoms_pos[ip].vz;
    clatoms_mass = class->clatoms_pos[ip].mass;
    for(ipart=myatm_start;ipart<=myatm_end;ipart++){
       ptens_tvten[1] += (clatoms_mass[ipart]*
                            clatoms_vx[ipart]*clatoms_vx[ipart]);
       ptens_tvten[5] += (clatoms_mass[ipart]*
                            clatoms_vy[ipart]*clatoms_vy[ipart]);
       ptens_tvten[9] += (clatoms_mass[ipart]*
                            clatoms_vz[ipart]*clatoms_vz[ipart]);
       ptens_tvten[2] += (clatoms_mass[ipart]*
                            clatoms_vx[ipart]*clatoms_vy[ipart]);
              }
    (ptens_tvten)[4] = (ptens_tvten)[2];
    if((general_data->cell.iperd)==3){
        ip=1;
        clatoms_vx = class->clatoms_pos[ip].vx;
        clatoms_vy = class->clatoms_pos[ip].vy;
        clatoms_vz = class->clatoms_pos[ip].vz;
        clatoms_mass = class->clatoms_pos[ip].mass;
        for(ipart=myatm_start;ipart<=myatm_end;ipart++){
          ptens_tvten[3] += (clatoms_mass[ipart]*
                               clatoms_vx[ipart]*clatoms_vz[ipart]);
          ptens_tvten[6] += (clatoms_mass[ipart]*
                               clatoms_vy[ipart]*clatoms_vz[ipart]);
                  }
      ptens_tvten[7] = ptens_tvten[3];
      ptens_tvten[8] = ptens_tvten[6];
    }
  }
  akinet = 0.0;
  for(ip=1;ip<=pi_beads_proc;ip++){
    clatoms_vx = class->clatoms_pos[ip].vx;
    clatoms_vy = class->clatoms_pos[ip].vy;
    clatoms_vz = class->clatoms_pos[ip].vz;
    clatoms_mass = class->clatoms_pos[ip].mass;
    for(ipart=myatm_start;ipart<=myatm_end;ipart++){
       akinet += clatoms_mass[ipart]*(
                            clatoms_vx[ipart]*clatoms_vx[ipart]
              + clatoms_vy[ipart]*clatoms_vy[ipart]
              + clatoms_vz[ipart]*clatoms_vz[ipart]);
                }
            }
  (general_data->stat_avg.kinet) = akinet/2.0;
               }

canonical_original_code:
void get_tvten_pimd(struct class *class, struct general_data *general_data)
{
    int i; int ipart; int ip; int iii;
    double akinet;
    double *ptens_tvten = general_data->ptens.tvten;
    double *clatoms_vx;
    double *clatoms_vy;
    double *clatoms_vz;
    double *clatoms_mass;
    int natm_tot = class->clatoms_info.natm_tot;
    int myid_bead = class->communicate.myid_bead;
    int pi_beads = class->clatoms_info.pi_beads;
    int pi_beads_proc = class->clatoms_info.pi_beads_proc;
    int pi_beads_proc_st = class->clatoms_info.pi_beads_proc_st;
    int myatm_start = class->clatoms_info.myatm_start;
    int myatm_end = class->clatoms_info.myatm_end;
  for(i=1;i<=9;i++){
    (ptens_tvten)[i] = 0.0;
            }
  if(pi_beads_proc_st==1){
    ip=1;
    clatoms_vx = class->clatoms_pos[ip].vx;
    clatoms_vy = class->clatoms_pos[ip].vy;
    clatoms_vz = class->clatoms_pos[ip].vz;
    clatoms_mass = class->clatoms_pos[ip].mass;
    for(ipart=myatm_start;ipart<=myatm_end;ipart++){
       ptens_tvten[1] += (clatoms_mass[ipart]*
                            clatoms_vx[ipart]*clatoms_vx[ipart]);
       ptens_tvten[5] += (clatoms_mass[ipart]*
                            clatoms_vy[ipart]*clatoms_vy[ipart]);
       ptens_tvten[9] += (clatoms_mass[ipart]*
                            clatoms_vz[ipart]*clatoms_vz[ipart]);
       ptens_tvten[2] += (clatoms_mass[ipart]*
                            clatoms_vx[ipart]*clatoms_vy[ipart]);
              }
    (ptens_tvten)[4] = (ptens_tvten)[2];
    if((general_data->cell.iperd)==3){
        ip=1;
        clatoms_vx = class->clatoms_pos[ip].vx;
        clatoms_vy = class->clatoms_pos[ip].vy;
        clatoms_vz = class->clatoms_pos[ip].vz;
        clatoms_mass = class->clatoms_pos[ip].mass;
        for(ipart=myatm_start;ipart<=myatm_end;ipart++){
          ptens_tvten[3] += (clatoms_mass[ipart]*
                               clatoms_vx[ipart]*clatoms_vz[ipart]);
          ptens_tvten[6] += (clatoms_mass[ipart]*
                               clatoms_vy[ipart]*clatoms_vz[ipart]);
                  }
      ptens_tvten[7] = ptens_tvten[3];
      ptens_tvten[8] = ptens_tvten[6];
    }
  }
  akinet = 0.0;
  for(ip=1;ip<=pi_beads_proc;ip++){
    clatoms_vx = class->clatoms_pos[ip].vx;
    clatoms_vy = class->clatoms_pos[ip].vy;
    clatoms_vz = class->clatoms_pos[ip].vz;
    clatoms_mass = class->clatoms_pos[ip].mass;
    for(ipart=myatm_start;ipart<=myatm_end;ipart++){
       akinet += clatoms_mass[ipart]*(
                            clatoms_vx[ipart]*clatoms_vx[ipart]
              + clatoms_vy[ipart]*clatoms_vy[ipart]
              + clatoms_vz[ipart]*clatoms_vz[ipart]);
                }
            }
  (general_data->stat_avg.kinet) = akinet/2.0;
               }

variable_types: i int

variable_types: ip int

variable_types: iii int

variable_types: akinet double

return_type: void

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_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 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; }

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 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; }

user_defined_types: 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; }

user_defined_types: 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; }

user_defined_types: 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; }

user_defined_types: 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; }

user_defined_types: 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; }

user_defined_types: 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; }

user_defined_types: 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; }

user_defined_types: 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; }

user_defined_types: 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; }

user_defined_types: 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; }

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 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 therm_scr { double *sc; double *atm_kin; }


original_code:
void nhc_vol_potkin_pimd(CLASS *class, GENERAL_DATA *general_data,int iflag)
{
int i,ip,inhc,ichain,iii;
int len_nhc,num_nhc;
int pi_beads = class->clatoms_info.pi_beads;
int pi_beads_proc = class->clatoms_info.pi_beads_proc;
int rank = class->communicate.myid_bead;
int mytherm_start = class->therm_info_class.mytherm_start;
int mytherm_end = class->therm_info_class.mytherm_end;
int pi_beads_proc_st = class->clatoms_info.pi_beads_proc_st;
int np_forc = class->communicate.np_forc;
int myid_forc = class->communicate.myid_forc;
int myid = class->communicate.myid;
int start,num_nhc_proc;
double kinet_nhc,kinet_nhc_old,kinet_nhc_loop,vpotnhc,temp1,temp2;
double **therm_x_nhc,x_nhc_tot;
double **therm_v_nhc;
double **therm_mass_nhc;
double **therm_gkt,gkt;
    vpotnhc = 0.0;
    kinet_nhc = 0.0;
    kinet_nhc_old = 0.0;
  start = (pi_beads_proc_st == 1 ? 2:1);
  if(pi_beads_proc_st == 1){
    len_nhc = class->therm_info_class.len_nhc;
    num_nhc = class->therm_info_class.num_nhc;
    therm_x_nhc = class->therm_class.x_nhc;
    therm_v_nhc = class->therm_class.v_nhc;
    therm_mass_nhc = class->therm_info_class.mass_nhc;
    therm_gkt = class->therm_info_class.gkt;
    for(ichain=1;ichain<=len_nhc;ichain++){
      for(inhc=mytherm_start;inhc<=mytherm_end;inhc++){
        kinet_nhc += (therm_mass_nhc[ichain][inhc]
               *therm_v_nhc[ichain][inhc]*therm_v_nhc[ichain][inhc]);
        vpotnhc += (therm_gkt[ichain][inhc]*
                              therm_x_nhc[ichain][inhc]);
              }
      if(iflag>0&&myid_forc==0){
        kinet_nhc += (general_data->baro.mass_vol_nhc[ichain]
               *general_data->baro.v_vol_nhc[ichain]
               *general_data->baro.v_vol_nhc[ichain]);
        vpotnhc += (general_data->baro.gkt_vol[ichain]*
                              general_data->baro.x_vol_nhc[ichain]);
               }
               }
  }
    general_data->stat_avg.kinet_nhc = kinet_nhc/2.0;
    mytherm_start = class->therm_info_bead.mytherm_start;
    mytherm_end = class->therm_info_bead.mytherm_end;
    kinet_nhc = 0.0;
    len_nhc = class->therm_info_bead.len_nhc;
    num_nhc = class->therm_info_bead.num_nhc;
    therm_mass_nhc = class->therm_info_bead.mass_nhc;
    therm_gkt = class->therm_info_bead.gkt;
    gkt = class->therm_info_bead.gkt[1][1];
    num_nhc_proc = mytherm_end - mytherm_start + 1;
    for(ip=start;ip<=pi_beads_proc;ip++){
     x_nhc_tot = class->therm_bead[ip].x_nhc_tot;
     therm_v_nhc = class->therm_bead[ip].v_nhc;
     for(ichain=1;ichain<=len_nhc;ichain++){
       for(inhc=mytherm_start;inhc<=mytherm_end;inhc++){
         kinet_nhc += (therm_mass_nhc[ichain][inhc]
                *therm_v_nhc[ichain][inhc]*therm_v_nhc[ichain][inhc]);
         vpotnhc += gkt*class->therm_bead[ip].x_nhc[ichain][inhc];
                 }
               }
              }
    kinet_nhc /= 2.0;
    general_data->stat_avg.kinet_nhc_bead = kinet_nhc;
    general_data->stat_avg.vpotnhc = vpotnhc;
   if(pi_beads_proc_st == 1){
      if(iflag==1){
        general_data->stat_avg.kinet_v = general_data->baro.mass_lnv
                                        *general_data->baro.v_lnv*
                                   general_data->baro.v_lnv/2.0;
        general_data->stat_avg.vpot_v = general_data->statepoint.pext
                                        *general_data->baro.vol
                                       - general_data->statepoint.stens_ext
                                        *general_data->baro.area;
               }
      if(iflag==2){
        general_data->stat_avg.kinet_v = 0.0;
        for(i=1;i<=9;i++){
          general_data->stat_avg.kinet_v += general_data->par_rahman.mass_hm
                                     *general_data->par_rahman.vgmat[i]
                                     *general_data->par_rahman.vgmat[i];
                  }
        general_data->stat_avg.kinet_v /= 2.0;
        general_data->stat_avg.vpot_v = general_data->statepoint.pext
                                         *general_data->par_rahman.vol
                                        - general_data->statepoint.stens_ext
                                         *general_data->par_rahman.area;
               }
   }
               }

canonical_original_code:
void nhc_vol_potkin_pimd(struct class *class, struct general_data *general_data, int iflag)
{
int i; int ip; int inhc; int ichain; int iii;
int len_nhc; int num_nhc;
int pi_beads = class->clatoms_info.pi_beads;
int pi_beads_proc = class->clatoms_info.pi_beads_proc;
int rank = class->communicate.myid_bead;
int mytherm_start = class->therm_info_class.mytherm_start;
int mytherm_end = class->therm_info_class.mytherm_end;
int pi_beads_proc_st = class->clatoms_info.pi_beads_proc_st;
int np_forc = class->communicate.np_forc;
int myid_forc = class->communicate.myid_forc;
int myid = class->communicate.myid;
int start; int num_nhc_proc;
double kinet_nhc; double kinet_nhc_old; double kinet_nhc_loop; double vpotnhc; double temp1; double temp2;
double **therm_x_nhc; double x_nhc_tot;
double **therm_v_nhc;
double **therm_mass_nhc;
double **therm_gkt; double gkt;
    vpotnhc = 0.0;
    kinet_nhc = 0.0;
    kinet_nhc_old = 0.0;
  start = (pi_beads_proc_st == 1 ? 2:1);
  if(pi_beads_proc_st == 1){
    len_nhc = class->therm_info_class.len_nhc;
    num_nhc = class->therm_info_class.num_nhc;
    therm_x_nhc = class->therm_class.x_nhc;
    therm_v_nhc = class->therm_class.v_nhc;
    therm_mass_nhc = class->therm_info_class.mass_nhc;
    therm_gkt = class->therm_info_class.gkt;
    for(ichain=1;ichain<=len_nhc;ichain++){
      for(inhc=mytherm_start;inhc<=mytherm_end;inhc++){
        kinet_nhc += (therm_mass_nhc[ichain][inhc]
               *therm_v_nhc[ichain][inhc]*therm_v_nhc[ichain][inhc]);
        vpotnhc += (therm_gkt[ichain][inhc]*
                              therm_x_nhc[ichain][inhc]);
              }
      if(iflag>0&&myid_forc==0){
        kinet_nhc += (general_data->baro.mass_vol_nhc[ichain]
               *general_data->baro.v_vol_nhc[ichain]
               *general_data->baro.v_vol_nhc[ichain]);
        vpotnhc += (general_data->baro.gkt_vol[ichain]*
                              general_data->baro.x_vol_nhc[ichain]);
               }
               }
  }
    general_data->stat_avg.kinet_nhc = kinet_nhc/2.0;
    mytherm_start = class->therm_info_bead.mytherm_start;
    mytherm_end = class->therm_info_bead.mytherm_end;
    kinet_nhc = 0.0;
    len_nhc = class->therm_info_bead.len_nhc;
    num_nhc = class->therm_info_bead.num_nhc;
    therm_mass_nhc = class->therm_info_bead.mass_nhc;
    therm_gkt = class->therm_info_bead.gkt;
    gkt = class->therm_info_bead.gkt[1][1];
    num_nhc_proc = mytherm_end - mytherm_start + 1;
    for(ip=start;ip<=pi_beads_proc;ip++){
     x_nhc_tot = class->therm_bead[ip].x_nhc_tot;
     therm_v_nhc = class->therm_bead[ip].v_nhc;
     for(ichain=1;ichain<=len_nhc;ichain++){
       for(inhc=mytherm_start;inhc<=mytherm_end;inhc++){
         kinet_nhc += (therm_mass_nhc[ichain][inhc]
                *therm_v_nhc[ichain][inhc]*therm_v_nhc[ichain][inhc]);
         vpotnhc += gkt*class->therm_bead[ip].x_nhc[ichain][inhc];
                 }
               }
              }
    kinet_nhc /= 2.0;
    general_data->stat_avg.kinet_nhc_bead = kinet_nhc;
    general_data->stat_avg.vpotnhc = vpotnhc;
   if(pi_beads_proc_st == 1){
      if(iflag==1){
        general_data->stat_avg.kinet_v = general_data->baro.mass_lnv
                                        *general_data->baro.v_lnv*
                                   general_data->baro.v_lnv/2.0;
        general_data->stat_avg.vpot_v = general_data->statepoint.pext
                                        *general_data->baro.vol
                                       - general_data->statepoint.stens_ext
                                        *general_data->baro.area;
               }
      if(iflag==2){
        general_data->stat_avg.kinet_v = 0.0;
        for(i=1;i<=9;i++){
          general_data->stat_avg.kinet_v += general_data->par_rahman.mass_hm
                                     *general_data->par_rahman.vgmat[i]
                                     *general_data->par_rahman.vgmat[i];
                  }
        general_data->stat_avg.kinet_v /= 2.0;
        general_data->stat_avg.vpot_v = general_data->statepoint.pext
                                         *general_data->par_rahman.vol
                                        - general_data->statepoint.stens_ext
                                         *general_data->par_rahman.area;
               }
   }
               }

variable_types: rank int

variable_types: myid int

variable_types: start int

variable_types: vpotnhc double

variable_types: gkt 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 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 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_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 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; }

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 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 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 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 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 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; }

user_defined_types: 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; }


decompiled_code:
__int64 __fastcall comm_statepoint(__int64 a1, unsigned int a2)
{
unsigned int v3; // [rsp+0h] [rbp-28h] BYREF
int v4; // [rsp+4h] [rbp-24h] BYREF
char v5[4]; // [rsp+8h] [rbp-20h] BYREF
int v6[7]; // [rsp+Ch] [rbp-1Ch] BYREF

Address(a1, v5);
v4 = 1;
v6[0] = 3;
Barrier(a2);
Type_struct(1LL, v6, v5, &v4, &v3);
Barrier(a2);
Type_commit(&v3);
Barrier(a2);
Bcast(0LL, 1LL, v3, 0LL, a2);
Barrier(a2);
return Type_free(&v3);
}

canonical_decompiled_code:
__int64 __fastcall func0(__int64 a1, unsigned int a2)
{
unsigned int v3; // [rsp+0h] [rbp-28h] BYREF
int v4; // [rsp+4h] [rbp-24h] BYREF
char v5[4]; // [rsp+8h] [rbp-20h] BYREF
int v6[7]; // [rsp+Ch] [rbp-1Ch] BYREF

Address(a1, v5);
v4 = 1;
v6[0] = 3;
Barrier(a2);
Type_struct(1LL, v6, v5, &v4, &v3);
Barrier(a2);
Type_commit(&v3);
Barrier(a2);
Bcast(0LL, 1LL, v3, 0LL, a2);
Barrier(a2);
return Type_free(&v3);
}

original_code:
void comm_statepoint(STATEPOINT *statepoint,int world)
{
  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 statepoint_comm;
  int types[1];
  int displs[1];
  int blockcounts[1];
  Address(&(statepoint->pext),&displs[0]);
  types[0] = MPI_DOUBLE;
  blockcounts[0] = 3;
  Barrier(world);
  Type_struct(1,blockcounts,displs,types,&statepoint_comm);
  Barrier(world);
  Type_commit(&statepoint_comm);
  Barrier(world);
  Bcast(MPI_BOTTOM,1,statepoint_comm,0,world);
  Barrier(world);
  Type_free(&statepoint_comm);
}

canonical_original_code:
void comm_statepoint(struct statepoint *statepoint, int world)
{
  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 statepoint_comm;
  int types[1];
  int displs[1];
  int blockcounts[1];
  Address(&(statepoint->pext),&displs[0]);
  types[0] = MPI_DOUBLE;
  blockcounts[0] = 3;
  Barrier(world);
  Type_struct(1,blockcounts,displs,types,&statepoint_comm);
  Barrier(world);
  Type_commit(&statepoint_comm);
  Barrier(world);
  Bcast(MPI_BOTTOM,1,statepoint_comm,0,world);
  Barrier(world);
  Type_free(&statepoint_comm);
}

variable_types:
statepoint
struct statepoint { double pext; } *

variable_types: world int

variable_types:
types
int [1]

variable_types:
displs
int [1]

variable_types:
blockcounts
int [1]


decompiled_code:
__int64 __fastcall comm_cell_data(_QWORD *a1, __int64 a2, __int64 a3, unsigned int a4)
{
Barrier(a4);
Bcast(a1 + 3, 1LL, 1LL, 0LL, a4);
Bcast(a1 + 4, 1LL, 1LL, 0LL, a4);
Bcast(a1 + 5, 1LL, 1LL, 0LL, a4);
Bcast(a1 + 1, 1LL, 1LL, 0LL, a4);
Bcast(a1[8] + 8LL, 9LL, 1LL, 0LL, a4);
Bcast(a1[9] + 8LL, 9LL, 1LL, 0LL, a4);
Bcast(a1[10] + 8LL, 9LL, 1LL, 0LL, a4);
Bcast(a1[11] + 8LL, 9LL, 1LL, 0LL, a4);
Bcast(a1[12] + 8LL, 9LL, 1LL, 0LL, a4);
Bcast(a1[13] + 8LL, 9LL, 1LL, 0LL, a4);
Bcast(a1[14] + 8LL, 3LL, 1LL, 0LL, a4);
Bcast(a1[15] + 8LL, 3LL, 1LL, 0LL, a4);
Bcast(a1[16] + 8LL, 3LL, 1LL, 0LL, a4);
Bcast(a1[17] + 8LL, 3LL, 1LL, 0LL, a4);
Bcast(a2, 1LL, 1LL, 0LL, a4);
Bcast(a3, 1LL, 1LL, 0LL, a4);
return Barrier(a4);
}

original_code:
void comm_cell_data(CELL *cell,double *dbox_rat,int *box_rat,int world)
{
  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 iii,i;
  Barrier(world);
  Bcast(&(cell->vol),1,MPI_DOUBLE,0,world);
  Bcast(&(cell->vol_cp),1,MPI_DOUBLE,0,world);
  Bcast(&(cell->vol0),1,MPI_DOUBLE,0,world);
  Bcast(&(cell->cubic_box_flag),1,MPI_INT,0,world);
  Bcast(&(cell->hmat[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->hmati[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->hmat_ewd[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->hmat_ewd_cp[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->hmat_cp[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->hmati_cp[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->cp_box_center[1]),3,MPI_DOUBLE,0,world);
  Bcast(&(cell->cp_box_center_rel[1]),3,MPI_DOUBLE,0,world);
  Bcast(&(cell->cp_vbox_center[1]),3,MPI_DOUBLE,0,world);
  Bcast(&(cell->cp_fbox_center[1]),3,MPI_DOUBLE,0,world);
  Bcast(dbox_rat,1,MPI_DOUBLE,0,world);
  Bcast(box_rat,1,MPI_INT,0,world);
  Barrier(world);
}

canonical_original_code:
void comm_cell_data(struct cell *cell, double *dbox_rat, int *box_rat, int world)
{
  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 iii; int i;
  Barrier(world);
  Bcast(&(cell->vol),1,MPI_DOUBLE,0,world);
  Bcast(&(cell->vol_cp),1,MPI_DOUBLE,0,world);
  Bcast(&(cell->vol0),1,MPI_DOUBLE,0,world);
  Bcast(&(cell->cubic_box_flag),1,MPI_INT,0,world);
  Bcast(&(cell->hmat[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->hmati[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->hmat_ewd[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->hmat_ewd_cp[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->hmat_cp[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->hmati_cp[1]),9,MPI_DOUBLE,0,world);
  Bcast(&(cell->cp_box_center[1]),3,MPI_DOUBLE,0,world);
  Bcast(&(cell->cp_box_center_rel[1]),3,MPI_DOUBLE,0,world);
  Bcast(&(cell->cp_vbox_center[1]),3,MPI_DOUBLE,0,world);
  Bcast(&(cell->cp_fbox_center[1]),3,MPI_DOUBLE,0,world);
  Bcast(dbox_rat,1,MPI_DOUBLE,0,world);
  Bcast(box_rat,1,MPI_INT,0,world);
  Barrier(world);
}

variable_types: 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; } *


decompiled_code:
__int64 __fastcall comm_clatoms_data(_QWORD *a1, unsigned int a2, __int64 a3, unsigned int a4)
{
_QWORD *v6; // rdi
unsigned int v7; // er12
unsigned int v9; // [rsp+0h] [rbp-48h] BYREF
int v10; // [rsp+4h] [rbp-44h] BYREF
char v11[4]; // [rsp+8h] [rbp-40h] BYREF
int v12[15]; // [rsp+Ch] [rbp-3Ch] BYREF

v6 = a1 + 11;
v7 = *((_DWORD *)v6 - 9);
Address(v6, v11);
v10 = 1;
v12[0] = 9;
Barrier(a4);
Type_struct(1LL, v12, v11, &v10, &v9);
Barrier(a4);
Type_commit(&v9);
Barrier(a4);
Bcast(0LL, 1LL, v9, 0LL, a4);
Type_free(&v9);
Barrier(a4);
Bcast(a1[25] + 8LL, v7, 1LL, 0LL, a4);
Bcast(a1[26] + 8LL, v7, 1LL, 0LL, a4);
Bcast(a1[27] + 8LL, v7, 1LL, 0LL, a4);
Bcast(a1[28] + 8LL, v7, 1LL, 0LL, a4);
Bcast(a1[30] + 8LL, v7, 1LL, 0LL, a4);
Bcast(a1[31] + 8LL, a2, 1LL, 0LL, a4);
return Barrier(a4);
}

canonical_decompiled_code:
__int64 __fastcall func2(_QWORD *a1, unsigned int a2, __int64 a3, unsigned int a4)
{
_QWORD *v6; // rdi
unsigned int v7; // er12
unsigned int v9; // [rsp+0h] [rbp-48h] BYREF
int v10; // [rsp+4h] [rbp-44h] BYREF
char v11[4]; // [rsp+8h] [rbp-40h] BYREF
int v12[15]; // [rsp+Ch] [rbp-3Ch] BYREF

v6 = a1 + 11;
v7 = *((_DWORD *)v6 - 9);
Address(v6, v11);
v10 = 1;
v12[0] = 9;
Barrier(a4);
Type_struct(1LL, v12, v11, &v10, &v9);
Barrier(a4);
Type_commit(&v9);
Barrier(a4);
Bcast(0LL, 1LL, v9, 0LL, a4);
Type_free(&v9);
Barrier(a4);
Bcast(a1[25] + 8LL, v7, 1LL, 0LL, a4);
Bcast(a1[26] + 8LL, v7, 1LL, 0LL, a4);
Bcast(a1[27] + 8LL, v7, 1LL, 0LL, a4);
Bcast(a1[28] + 8LL, v7, 1LL, 0LL, a4);
Bcast(a1[30] + 8LL, v7, 1LL, 0LL, a4);
Bcast(a1[31] + 8LL, a2, 1LL, 0LL, a4);
return Barrier(a4);
}

original_code:
void comm_clatoms_data(CLATOMS_INFO *clatoms_info,int nmol_typ,
                            int pimd_on,int world)
{
  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 iii;
  int ndata_scal = 9;
  int clatoms_info_comm;
  int types[1];
  int displs[1];
  int blockcounts[1];
  int natm_mall = clatoms_info->natm_mall;
  int pi_beads = clatoms_info->pi_beads;
  Address(&(clatoms_info->gamma_adb),&displs[0]);
  types[0] = MPI_DOUBLE;
  blockcounts[0] = ndata_scal;
  Barrier(world);
  Type_struct(1,blockcounts,displs,types,&clatoms_info_comm);
  Barrier(world);
  Type_commit(&clatoms_info_comm);
  Barrier(world);
  Bcast(MPI_BOTTOM,1,clatoms_info_comm,0,world);
  Type_free(&clatoms_info_comm);
  Barrier(world);
  Bcast(&(clatoms_info->mass[1]),natm_mall,MPI_DOUBLE,0,world);
  Bcast(&(clatoms_info->q[1]),natm_mall,MPI_DOUBLE,0,world);
  Bcast(&(clatoms_info->alp_pol[1]),natm_mall,MPI_DOUBLE,0,world);
  Bcast(&(clatoms_info->b_neut[1]),natm_mall,MPI_DOUBLE,0,world);
  Bcast(&(clatoms_info->text_atm[1]),natm_mall,MPI_DOUBLE,0,world);
  Bcast(&(clatoms_info->text_mol[1]),nmol_typ ,MPI_DOUBLE,0,world);
  Barrier(world);
}

canonical_original_code:
void comm_clatoms_data(struct clatoms_info *clatoms_info, int nmol_typ, int pimd_on, int world)
{
  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 iii;
  int ndata_scal = 9;
  int clatoms_info_comm;
  int types[1];
  int displs[1];
  int blockcounts[1];
  int natm_mall = clatoms_info->natm_mall;
  int pi_beads = clatoms_info->pi_beads;
  Address(&(clatoms_info->gamma_adb),&displs[0]);
  types[0] = MPI_DOUBLE;
  blockcounts[0] = ndata_scal;
  Barrier(world);
  Type_struct(1,blockcounts,displs,types,&clatoms_info_comm);
  Barrier(world);
  Type_commit(&clatoms_info_comm);
  Barrier(world);
  Bcast(MPI_BOTTOM,1,clatoms_info_comm,0,world);
  Type_free(&clatoms_info_comm);
  Barrier(world);
  Bcast(&(clatoms_info->mass[1]),natm_mall,MPI_DOUBLE,0,world);
  Bcast(&(clatoms_info->q[1]),natm_mall,MPI_DOUBLE,0,world);
  Bcast(&(clatoms_info->alp_pol[1]),natm_mall,MPI_DOUBLE,0,world);
  Bcast(&(clatoms_info->b_neut[1]),natm_mall,MPI_DOUBLE,0,world);
  Bcast(&(clatoms_info->text_atm[1]),natm_mall,MPI_DOUBLE,0,world);
  Bcast(&(clatoms_info->text_mol[1]),nmol_typ ,MPI_DOUBLE,0,world);
  Barrier(world);
}

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; } *


decompiled_code:
__int64 __fastcall comm_nbr_list_data(__int64 a1, unsigned int a2)
{
unsigned int v3; // [rsp+0h] [rbp-28h] BYREF
int v4; // [rsp+4h] [rbp-24h] BYREF
char v5[4]; // [rsp+8h] [rbp-20h] BYREF
int v6[7]; // [rsp+Ch] [rbp-1Ch] BYREF

Address(a1 + 136, v5);
v4 = 1;
v6[0] = 1;
Barrier(a2);
Type_struct(1LL, v6, v5, &v4, &v3);
Barrier(a2);
Type_commit(&v3);
Barrier(a2);
Bcast(0LL, 1LL, v3, 0LL, a2);
Type_free(&v3);
return Barrier(a2);
}

canonical_decompiled_code:
__int64 __fastcall func3(__int64 a1, unsigned int a2)
{
unsigned int v3; // [rsp+0h] [rbp-28h] BYREF
int v4; // [rsp+4h] [rbp-24h] BYREF
char v5[4]; // [rsp+8h] [rbp-20h] BYREF
int v6[7]; // [rsp+Ch] [rbp-1Ch] BYREF

Address(a1 + 136, v5);
v4 = 1;
v6[0] = 1;
Barrier(a2);
Type_struct(1LL, v6, v5, &v4, &v3);
Barrier(a2);
Type_commit(&v3);
Barrier(a2);
Bcast(0LL, 1LL, v3, 0LL, a2);
Type_free(&v3);
return Barrier(a2);
}

original_code:
void comm_nbr_list_data(NBR_LIST *nbr_list,int world)
{
  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 iii;
  int nnbr_list_scal = 1;
  int nbr_list_comm;
  int types[1];
  int displs[1];
  int blockcounts[1];
  Address(&(nbr_list->verlist.mem_safe),&displs[0]);
  types[0] = MPI_DOUBLE;
  blockcounts[0] = nnbr_list_scal;
  Barrier(world);
  Type_struct(1,blockcounts,displs,types,&nbr_list_comm);
  Barrier(world);
  Type_commit(&nbr_list_comm);
  Barrier(world);
  Bcast(MPI_BOTTOM,1,nbr_list_comm,0,world);
  Type_free(&nbr_list_comm);
  Barrier(world);
}

canonical_original_code:
void comm_nbr_list_data(struct nbr_list *nbr_list, int world)
{
  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 iii;
  int nnbr_list_scal = 1;
  int nbr_list_comm;
  int types[1];
  int displs[1];
  int blockcounts[1];
  Address(&(nbr_list->verlist.mem_safe),&displs[0]);
  types[0] = MPI_DOUBLE;
  blockcounts[0] = nnbr_list_scal;
  Barrier(world);
  Type_struct(1,blockcounts,displs,types,&nbr_list_comm);
  Barrier(world);
  Type_commit(&nbr_list_comm);
  Barrier(world);
  Bcast(MPI_BOTTOM,1,nbr_list_comm,0,world);
  Type_free(&nbr_list_comm);
  Barrier(world);
}

variable_types: 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; } *


decompiled_code:
__int64 __fastcall comm_interact_data(__int64 a1, unsigned int a2)
{
unsigned int v3; // [rsp+0h] [rbp-28h] BYREF
int v4; // [rsp+4h] [rbp-24h] BYREF
char v5[4]; // [rsp+8h] [rbp-20h] BYREF
int v6[7]; // [rsp+Ch] [rbp-1Ch] BYREF

Address(a1 + 40, v5);
v4 = 1;
v6[0] = 9;
Barrier(a2);
Type_struct(1LL, v6, v5, &v4, &v3);
Barrier(a2);
Type_commit(&v3);
Barrier(a2);
Bcast(0LL, 1LL, v3, 0LL, a2);
Type_free(&v3);
return Barrier(a2);
}

canonical_decompiled_code:
__int64 __fastcall func4(__int64 a1, unsigned int a2)
{
unsigned int v3; // [rsp+0h] [rbp-28h] BYREF
int v4; // [rsp+4h] [rbp-24h] BYREF
char v5[4]; // [rsp+8h] [rbp-20h] BYREF
int v6[7]; // [rsp+Ch] [rbp-1Ch] BYREF

Address(a1 + 40, v5);
v4 = 1;
v6[0] = 9;
Barrier(a2);
Type_struct(1LL, v6, v5, &v4, &v3);
Barrier(a2);
Type_commit(&v3);
Barrier(a2);
Bcast(0LL, 1LL, v3, 0LL, a2);
Type_free(&v3);
return Barrier(a2);
}

original_code:
void comm_interact_data(INTERACT *interact,int world)
{
  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 iii;
  int ninteract_scal = 9;
  int ninter_mall = interact->ninter_mall;
  int nsplin_mall_tot = interact->nsplin_mall_tot;
  int interact_comm;
  int types[1];
  int displs[1];
  int blockcounts[1];
  Address(&(interact->dielectric_rheal),&displs[0]);
  types[0] = MPI_DOUBLE;
  blockcounts[0] = ninteract_scal;
  Barrier(world);
  Type_struct(1,blockcounts,displs,types,&interact_comm);
  Barrier(world);
  Type_commit(&interact_comm);
  Barrier(world);
  Bcast(MPI_BOTTOM,1,interact_comm,0,world);
  Type_free(&interact_comm);
  Barrier(world);
}

canonical_original_code:
void comm_interact_data(struct interact *interact, int world)
{
  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 iii;
  int ninteract_scal = 9;
  int ninter_mall = interact->ninter_mall;
  int nsplin_mall_tot = interact->nsplin_mall_tot;
  int interact_comm;
  int types[1];
  int displs[1];
  int blockcounts[1];
  Address(&(interact->dielectric_rheal),&displs[0]);
  types[0] = MPI_DOUBLE;
  blockcounts[0] = ninteract_scal;
  Barrier(world);
  Type_struct(1,blockcounts,displs,types,&interact_comm);
  Barrier(world);
  Type_commit(&interact_comm);
  Barrier(world);
  Bcast(MPI_BOTTOM,1,interact_comm,0,world);
  Type_free(&interact_comm);
  Barrier(world);
}

variable_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; } *


decompiled_code:
__int64 __fastcall comm_ghost_atoms_data(__int64 a1, unsigned int a2)
{
int v2; // er12
int v3; // er13

v2 = *(_DWORD *)(a1 + 16);
v3 = *(_DWORD *)(a1 + 8);
Barrier(a2);
if ( v2 > 0 && v3 > 0 )
Bcast(*(_QWORD *)(*(_QWORD *)(a1 + 48) + 8LL) + 8LL, (unsigned int)(v3 * v2), 1LL, 0LL, a2);
return Barrier(a2);
}

canonical_decompiled_code:
__int64 __fastcall func5(__int64 a1, unsigned int a2)
{
int v2; // er12
int v3; // er13

v2 = *(_DWORD *)(a1 + 16);
v3 = *(_DWORD *)(a1 + 8);
Barrier(a2);
if ( v2 > 0 && v3 > 0 )
Bcast(*(_QWORD *)(*(_QWORD *)(a1 + 48) + 8LL) + 8LL, (unsigned int)(v3 * v2), 1LL, 0LL, a2);
return Barrier(a2);
}

original_code:
void comm_ghost_atoms_data(GHOST_ATOMS *ghost_atoms,int world)
{
  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 iii;
  int ncomp_mall = ghost_atoms->ncomp_mall;
  int nghost_mall = ghost_atoms->nghost_mall;
  Barrier(world);
  if((ncomp_mall>0)&&(nghost_mall>0)){
    Bcast(&(ghost_atoms->coef[1][1]),
                  ncomp_mall*nghost_mall,MPI_DOUBLE,0,world);
  }
  Barrier(world);
}

canonical_original_code:
void comm_ghost_atoms_data(struct ghost_atoms *ghost_atoms, int world)
{
  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 iii;
  int ncomp_mall = ghost_atoms->ncomp_mall;
  int nghost_mall = ghost_atoms->nghost_mall;
  Barrier(world);
  if((ncomp_mall>0)&&(nghost_mall>0)){
    Bcast(&(ghost_atoms->coef[1][1]),
                  ncomp_mall*nghost_mall,MPI_DOUBLE,0,world);
  }
  Barrier(world);
}

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; } *


decompiled_code:
__int64 __fastcall comm_class_parse_data(_QWORD *a1, unsigned int a2, unsigned int a3)
{
__int64 result; // rax

Bcast(a1 + 5, 1LL, 1LL, 0LL, a3);
Bcast(a1 + 6, 1LL, 1LL, 0LL, a3);
Bcast(a1 + 7, 1LL, 1LL, 0LL, a3);
result = Barrier(a3);
if ( (int)a2 > 0 )
{
Bcast(a1[14] + 8LL, a2, 1LL, 0LL, a3);
Bcast(a1[15] + 8LL, a2, 1LL, 0LL, a3);
Bcast(a1[16] + 8LL, a2, 1LL, 0LL, a3);
result = Barrier(a3);
}
return result;
}

canonical_decompiled_code:
__int64 __fastcall func6(_QWORD *a1, unsigned int a2, unsigned int a3)
{
__int64 result; // rax

Bcast(a1 + 5, 1LL, 1LL, 0LL, a3);
Bcast(a1 + 6, 1LL, 1LL, 0LL, a3);
Bcast(a1 + 7, 1LL, 1LL, 0LL, a3);
result = Barrier(a3);
if ( (int)a2 > 0 )
{
Bcast(a1[14] + 8LL, a2, 1LL, 0LL, a3);
Bcast(a1[15] + 8LL, a2, 1LL, 0LL, a3);
Bcast(a1[16] + 8LL, a2, 1LL, 0LL, a3);
result = Barrier(a3);
}
return result;
}

original_code:
void comm_class_parse_data(CLASS_PARSE *class_parse,int nmol_typ,
                         int world)
{
  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 iii;
  Bcast(&(class_parse->tau_vol),1,MPI_DOUBLE,0,world);
  Bcast(&(class_parse->tau_vol_nhc),1,MPI_DOUBLE,0,world);
  Bcast(&(class_parse->tau_nhc_def),1,MPI_DOUBLE,0,world);
  Barrier(world);
if(nmol_typ > 0){
  Bcast(&(class_parse->tau_nhc_mol[1]),nmol_typ,MPI_DOUBLE,0,world);
  Bcast(&(class_parse->text_nhc_mol[1]),nmol_typ,MPI_DOUBLE,0,world);
  Bcast(&(class_parse->mol_hydrog_mass_val[1]),nmol_typ,MPI_DOUBLE,0,world);
  Barrier(world);
}
}

canonical_original_code:
void comm_class_parse_data(struct class_parse *class_parse, int nmol_typ, int world)
{
  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 iii;
  Bcast(&(class_parse->tau_vol),1,MPI_DOUBLE,0,world);
  Bcast(&(class_parse->tau_vol_nhc),1,MPI_DOUBLE,0,world);
  Bcast(&(class_parse->tau_nhc_def),1,MPI_DOUBLE,0,world);
  Barrier(world);
if(nmol_typ > 0){
  Bcast(&(class_parse->tau_nhc_mol[1]),nmol_typ,MPI_DOUBLE,0,world);
  Bcast(&(class_parse->text_nhc_mol[1]),nmol_typ,MPI_DOUBLE,0,world);
  Bcast(&(class_parse->mol_hydrog_mass_val[1]),nmol_typ,MPI_DOUBLE,0,world);
  Barrier(world);
}
}

variable_types: struct class_parse { int ivx_smpl; int ivx_scale; int kmax_ewd; int istart; int ishift_pot; int initial_spread_opt; int zero_com_vel; double tau_vol; double tau_nhc_def; int *imol_nhc_opt; int *ionfo_opt; int *ires_bond_conv; int *mol_freeze_opt; int *mol_hydrog_mass_opt; int *mol_hydrog_con_opt; double *tau_nhc_mol; double *text_nhc_mol; double *mol_hydrog_mass_val; } *

variable_types: iii int


decompiled_code:
__int64 __fastcall comm_surface_data(__int64 a1, unsigned int a2)
{
unsigned int v3; // [rsp+0h] [rbp-28h] BYREF
int v4; // [rsp+4h] [rbp-24h] BYREF
char v5[4]; // [rsp+8h] [rbp-20h] BYREF
int v6[7]; // [rsp+Ch] [rbp-1Ch] BYREF

Address(a1 + 16, v5);
v4 = 1;
v6[0] = 2;
Barrier(a2);
Type_struct(1LL, v6, v5, &v4, &v3);
Barrier(a2);
Type_commit(&v3);
Barrier(a2);
Bcast(0LL, 1LL, v3, 0LL, a2);
Barrier(a2);
return Type_free(&v3);
}

canonical_decompiled_code:
__int64 __fastcall func7(__int64 a1, unsigned int a2)
{
unsigned int v3; // [rsp+0h] [rbp-28h] BYREF
int v4; // [rsp+4h] [rbp-24h] BYREF
char v5[4]; // [rsp+8h] [rbp-20h] BYREF
int v6[7]; // [rsp+Ch] [rbp-1Ch] BYREF

Address(a1 + 16, v5);
v4 = 1;
v6[0] = 2;
Barrier(a2);
Type_struct(1LL, v6, v5, &v4, &v3);
Barrier(a2);
Type_commit(&v3);
Barrier(a2);
Bcast(0LL, 1LL, v3, 0LL, a2);
Barrier(a2);
return Type_free(&v3);
}

original_code:
void comm_surface_data(SURFACE *surface, int world)
     {
  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 surface_comm;
  int types[1];
  int displs[1];
  int blockcounts[1];
  Address(&(surface->zheal),&displs[0]);
  types[0] = MPI_DOUBLE;
  blockcounts[0] = 2;
  Barrier(world);
  Type_struct(1,blockcounts,displs,types,&surface_comm);
  Barrier(world);
  Type_commit(&surface_comm);
  Barrier(world);
  Bcast(MPI_BOTTOM,1,surface_comm,0,world);
  Barrier(world);
  Type_free(&surface_comm);
   }

canonical_original_code:
void comm_surface_data(struct surface *surface, int world)
     {
  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 surface_comm;
  int types[1];
  int displs[1];
  int blockcounts[1];
  Address(&(surface->zheal),&displs[0]);
  types[0] = MPI_DOUBLE;
  blockcounts[0] = 2;
  Barrier(world);
  Type_struct(1,blockcounts,displs,types,&surface_comm);
  Barrier(world);
  Type_commit(&surface_comm);
  Barrier(world);
  Bcast(MPI_BOTTOM,1,surface_comm,0,world);
  Barrier(world);
  Type_free(&surface_comm);
   }

variable_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]; } *