original_code:
void communicate_output_pimd(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};
  double *scr_x,*scr_temp_x;
  double *scr_y,*scr_temp_y;
  double *scr_z,*scr_temp_z;
  double *scr_nhc_x,*scr_temp_nhc_x;
  int ip,ipart,ii,num,i,j,k;
  int iproc,iii;
  int len_nhc = class->therm_info_bead.len_nhc;
  int num_nhc = class->therm_info_bead.num_nhc;
  int natm_tot = class->clatoms_info.natm_tot;
  int pi_beads = class->clatoms_info.pi_beads;
  int pi_beads_proc = class->clatoms_info.pi_beads_proc;
  int num_proc = class->communicate.np_beads;
  int myid = class->communicate.myid_bead;
  int n2,n3;
  int world = class->communicate.comm_beads;
  if(myid==0){
    scr_x = (double *)malloc(pi_beads*natm_tot*sizeof(double)) -1;
    scr_y = (double *)malloc(pi_beads*natm_tot*sizeof(double)) -1;
    scr_z = (double *)malloc(pi_beads*natm_tot*sizeof(double)) -1;
    num = pi_beads*len_nhc*num_nhc;
    scr_nhc_x = (double *)cmalloc(num*sizeof(double)) -1;
  }
  if(myid>0){
    scr_temp_x = (double *)malloc(pi_beads_proc*natm_tot*sizeof(double)) -1;
    scr_temp_y = (double *)malloc(pi_beads_proc*natm_tot*sizeof(double)) -1;
    scr_temp_z = (double *)malloc(pi_beads_proc*natm_tot*sizeof(double)) -1;
    num = pi_beads_proc*len_nhc*num_nhc;
    scr_temp_nhc_x = (double *)cmalloc(num*sizeof(double)) -1;
  }
  if(myid>0){
    ii = 0;
    for(ip=1;ip<=pi_beads_proc;ip++){
      for(ipart=1;ipart<=natm_tot;ipart++){
        ii++;
        scr_temp_x[ii] = class->clatoms_pos[ip].x[ipart];
        scr_temp_y[ii] = class->clatoms_pos[ip].y[ipart];
        scr_temp_z[ii] = class->clatoms_pos[ip].z[ipart];
      }
    }
  }
  if(myid>0){
    Send(&scr_temp_x[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
    Send(&scr_temp_y[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
    Send(&scr_temp_z[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
  }
  if(myid==0){
    for(iproc=1;iproc<num_proc;iproc++){
        Recv(&(scr_x[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
        Recv(&(scr_y[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
        Recv(&(scr_z[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
    }
  }
  if(myid==0){
    ii = 0;
    for(ip=pi_beads_proc+1;ip<=pi_beads;ip++){
      for(ipart=1;ipart<=natm_tot;ipart++){
        ii++;
        class->clatoms_pos[ip].x[ipart] = scr_x[ii];
        class->clatoms_pos[ip].y[ipart] = scr_y[ii];
        class->clatoms_pos[ip].z[ipart] = scr_z[ii];
      }
    }
  }
  ii = 0;
  if(myid>0){
    for(ip=1;ip<=pi_beads_proc;ip++){
      for(ipart=1;ipart<=natm_tot;ipart++){
        ii++;
        scr_temp_x[ii] = class->clatoms_pos[ip].vx[ipart];
        scr_temp_y[ii] = class->clatoms_pos[ip].vy[ipart];
        scr_temp_z[ii] = class->clatoms_pos[ip].vz[ipart];
      }
    }
  }
  if(myid>0){
    Send(&scr_temp_x[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
    Send(&scr_temp_y[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
    Send(&scr_temp_z[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
  }
  if(myid==0){
    for(iproc=1;iproc<num_proc;iproc++){
        Recv(&(scr_x[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
        Recv(&(scr_y[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
        Recv(&(scr_z[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
    }
  }
  if(myid==0){
    ii = 0;
    for(ip=pi_beads_proc+1;ip<=pi_beads;ip++){
      for(ipart=1;ipart<=natm_tot;ipart++){
        ii++;
        class->clatoms_pos[ip].vx[ipart] = scr_x[ii];
        class->clatoms_pos[ip].vy[ipart] = scr_y[ii];
        class->clatoms_pos[ip].vz[ipart] = scr_z[ii];
      }
    }
  }
  n2 = len_nhc;
  n3 = num_nhc;
  if(myid>0){
    for(k=1;k<= pi_beads_proc; k++){
       for(j=1;j<=(len_nhc);j++){
          for(i=1;i<=(num_nhc);i++){
             ii = (i-1) + (j-1)*n3 + (k-1)*n2*n3 + 1;
              scr_temp_nhc_x[ii] = class->therm_bead[k].v_nhc[j][i];
          }
       }
    }
  }
  if(myid>0){
    Send(&scr_temp_nhc_x[1],pi_beads_proc*len_nhc*num_nhc,
                      MPI_DOUBLE,0,myid,world);
  }
  if(myid==0){
    for(iproc=1;iproc<num_proc;iproc++){
        Recv(&(scr_nhc_x[(iproc-1)*pi_beads_proc*len_nhc*num_nhc+1]),
          pi_beads_proc*len_nhc*num_nhc,MPI_DOUBLE,
                    iproc,iproc,world);
    }
  }
  if(myid==0){
    for(k=pi_beads_proc+1;k<= pi_beads; k++){
       for(j=1;j<=(len_nhc);j++){
          for(i=1;i<=(num_nhc);i++){
            ii = (i-1) + (j-1)*n3 + (k-pi_beads_proc-1)*n2*n3 + 1;
            class->therm_bead[k].v_nhc[j][i] = scr_nhc_x[ii];
         }
      }
    }
  }
 if(myid==0){
     cfree(&(scr_x[1]));
     cfree(&(scr_y[1]));
     cfree(&(scr_z[1]));
     cfree(&(scr_nhc_x[1]));
 }else{
     cfree(&(scr_temp_x[1]));
     cfree(&(scr_temp_y[1]));
     cfree(&(scr_temp_z[1]));
     cfree(&(scr_temp_nhc_x[1]));
 }
   }

canonical_original_code:
void communicate_output_pimd(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};
  double *scr_x; double *scr_temp_x;
  double *scr_y; double *scr_temp_y;
  double *scr_z; double *scr_temp_z;
  double *scr_nhc_x; double *scr_temp_nhc_x;
  int ip; int ipart; int ii; int num; int i; int j; int k;
  int iproc; int iii;
  int len_nhc = class->therm_info_bead.len_nhc;
  int num_nhc = class->therm_info_bead.num_nhc;
  int natm_tot = class->clatoms_info.natm_tot;
  int pi_beads = class->clatoms_info.pi_beads;
  int pi_beads_proc = class->clatoms_info.pi_beads_proc;
  int num_proc = class->communicate.np_beads;
  int myid = class->communicate.myid_bead;
  int n2; int n3;
  int world = class->communicate.comm_beads;
  if(myid==0){
    scr_x = (double *)malloc(pi_beads*natm_tot*sizeof(double)) -1;
    scr_y = (double *)malloc(pi_beads*natm_tot*sizeof(double)) -1;
    scr_z = (double *)malloc(pi_beads*natm_tot*sizeof(double)) -1;
    num = pi_beads*len_nhc*num_nhc;
    scr_nhc_x = (double *)cmalloc(num*sizeof(double)) -1;
  }
  if(myid>0){
    scr_temp_x = (double *)malloc(pi_beads_proc*natm_tot*sizeof(double)) -1;
    scr_temp_y = (double *)malloc(pi_beads_proc*natm_tot*sizeof(double)) -1;
    scr_temp_z = (double *)malloc(pi_beads_proc*natm_tot*sizeof(double)) -1;
    num = pi_beads_proc*len_nhc*num_nhc;
    scr_temp_nhc_x = (double *)cmalloc(num*sizeof(double)) -1;
  }
  if(myid>0){
    ii = 0;
    for(ip=1;ip<=pi_beads_proc;ip++){
      for(ipart=1;ipart<=natm_tot;ipart++){
        ii++;
        scr_temp_x[ii] = class->clatoms_pos[ip].x[ipart];
        scr_temp_y[ii] = class->clatoms_pos[ip].y[ipart];
        scr_temp_z[ii] = class->clatoms_pos[ip].z[ipart];
      }
    }
  }
  if(myid>0){
    Send(&scr_temp_x[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
    Send(&scr_temp_y[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
    Send(&scr_temp_z[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
  }
  if(myid==0){
    for(iproc=1;iproc<num_proc;iproc++){
        Recv(&(scr_x[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
        Recv(&(scr_y[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
        Recv(&(scr_z[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
    }
  }
  if(myid==0){
    ii = 0;
    for(ip=pi_beads_proc+1;ip<=pi_beads;ip++){
      for(ipart=1;ipart<=natm_tot;ipart++){
        ii++;
        class->clatoms_pos[ip].x[ipart] = scr_x[ii];
        class->clatoms_pos[ip].y[ipart] = scr_y[ii];
        class->clatoms_pos[ip].z[ipart] = scr_z[ii];
      }
    }
  }
  ii = 0;
  if(myid>0){
    for(ip=1;ip<=pi_beads_proc;ip++){
      for(ipart=1;ipart<=natm_tot;ipart++){
        ii++;
        scr_temp_x[ii] = class->clatoms_pos[ip].vx[ipart];
        scr_temp_y[ii] = class->clatoms_pos[ip].vy[ipart];
        scr_temp_z[ii] = class->clatoms_pos[ip].vz[ipart];
      }
    }
  }
  if(myid>0){
    Send(&scr_temp_x[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
    Send(&scr_temp_y[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
    Send(&scr_temp_z[1],(pi_beads_proc)*(natm_tot),
                      MPI_DOUBLE,0,myid,world);
  }
  if(myid==0){
    for(iproc=1;iproc<num_proc;iproc++){
        Recv(&(scr_x[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
        Recv(&(scr_y[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
        Recv(&(scr_z[(iproc-1)*pi_beads_proc*natm_tot+1]),
           (pi_beads_proc)*(natm_tot),MPI_DOUBLE,
                    iproc,iproc,world);
    }
  }
  if(myid==0){
    ii = 0;
    for(ip=pi_beads_proc+1;ip<=pi_beads;ip++){
      for(ipart=1;ipart<=natm_tot;ipart++){
        ii++;
        class->clatoms_pos[ip].vx[ipart] = scr_x[ii];
        class->clatoms_pos[ip].vy[ipart] = scr_y[ii];
        class->clatoms_pos[ip].vz[ipart] = scr_z[ii];
      }
    }
  }
  n2 = len_nhc;
  n3 = num_nhc;
  if(myid>0){
    for(k=1;k<= pi_beads_proc; k++){
       for(j=1;j<=(len_nhc);j++){
          for(i=1;i<=(num_nhc);i++){
             ii = (i-1) + (j-1)*n3 + (k-1)*n2*n3 + 1;
              scr_temp_nhc_x[ii] = class->therm_bead[k].v_nhc[j][i];
          }
       }
    }
  }
  if(myid>0){
    Send(&scr_temp_nhc_x[1],pi_beads_proc*len_nhc*num_nhc,
                      MPI_DOUBLE,0,myid,world);
  }
  if(myid==0){
    for(iproc=1;iproc<num_proc;iproc++){
        Recv(&(scr_nhc_x[(iproc-1)*pi_beads_proc*len_nhc*num_nhc+1]),
          pi_beads_proc*len_nhc*num_nhc,MPI_DOUBLE,
                    iproc,iproc,world);
    }
  }
  if(myid==0){
    for(k=pi_beads_proc+1;k<= pi_beads; k++){
       for(j=1;j<=(len_nhc);j++){
          for(i=1;i<=(num_nhc);i++){
            ii = (i-1) + (j-1)*n3 + (k-pi_beads_proc-1)*n2*n3 + 1;
            class->therm_bead[k].v_nhc[j][i] = scr_nhc_x[ii];
         }
      }
    }
  }
 if(myid==0){
     cfree(&(scr_x[1]));
     cfree(&(scr_y[1]));
     cfree(&(scr_z[1]));
     cfree(&(scr_nhc_x[1]));
 }else{
     cfree(&(scr_temp_x[1]));
     cfree(&(scr_temp_y[1]));
     cfree(&(scr_temp_z[1]));
     cfree(&(scr_temp_nhc_x[1]));
 }
   }

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

variable_types: ii int

variable_types: j int

variable_types: k int

variable_types: iproc int

variable_types: iii int

variable_types: myid int

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

decompiled_code:
int __fastcall control_cp_pimd_min(_DWORD *a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
int result; // eax
__int64 v9; // rbp
int v10; // esi
int v11; // ebx
__int64 v12; // rax
__int64 v13; // rbp
__int64 v14; // r12
__int64 v15; // rdx
__int64 v16; // rcx
double v17; // xmm0_8
double v18; // xmm0_8
__int64 v19; // rsi
double v20; // xmm0_8
int v21; // ebx
int v22; // ebx
int v23; // ebx
int v24; // ebx
unsigned int v25; // [rsp+0h] [rbp-108h]
int v26; // [rsp+4h] [rbp-104h]
__int64 v27; // [rsp+8h] [rbp-100h]
__int64 v28; // [rsp+10h] [rbp-F8h]
__int64 v29; // [rsp+18h] [rbp-F0h]
__int64 v30; // [rsp+28h] [rbp-E0h]
__int64 v31; // [rsp+38h] [rbp-D0h]
__int64 v32; // [rsp+40h] [rbp-C8h]
unsigned int v33; // [rsp+48h] [rbp-C0h]
unsigned int v34; // [rsp+4Ch] [rbp-BCh]
int v36; // [rsp+58h] [rbp-B0h]
int v37; // [rsp+5Ch] [rbp-ACh]
double v38; // [rsp+60h] [rbp-A8h]
unsigned int v39; // [rsp+78h] [rbp-90h]
unsigned int v40; // [rsp+7Ch] [rbp-8Ch]
int v41; // [rsp+80h] [rbp-88h]
int v42; // [rsp+84h] [rbp-84h]
unsigned int v43; // [rsp+88h] [rbp-80h]
int v44; // [rsp+8Ch] [rbp-7Ch]
unsigned int v45; // [rsp+90h] [rbp-78h] BYREF
unsigned int v46; // [rsp+94h] [rbp-74h] BYREF
int v47; // [rsp+98h] [rbp-70h] BYREF
int v48; // [rsp+9Ch] [rbp-6Ch] BYREF
__int64 v49; // [rsp+A0h] [rbp-68h] BYREF
__int64 v50; // [rsp+A8h] [rbp-60h] BYREF
double v51; // [rsp+B0h] [rbp-58h] BYREF
double v52; // [rsp+B8h] [rbp-50h] BYREF
double v53; // [rsp+C0h] [rbp-48h] BYREF
double v54[8]; // [rsp+C8h] [rbp-40h] BYREF

v42 = a1[2];
v39 = a1[822];
v25 = a1[813];
v36 = *(_DWORD *)(a4 + 2832);
v34 = a1[818];
v37 = *(_DWORD *)(a4 + 2812);
v43 = a1[816];
v40 = a1[825];
v26 = a1[814];
v41 = a1[808];
result = *(_DWORD *)(a3 + 4368);
v44 = result;
if ( result == 1 )
{
v21 = 79;
do
{
putchar(61);
--v21;
}
while ( v21 );
v22 = 79;
putchar(10);
puts("Running CP-MINIMIZATION ");
do
{
putchar(45);
--v22;
}
while ( v22 );
result = putchar(10);
}
if ( v42 <= 0 )
goto LABEL_48;
v33 = 1;
v9 = a3;
do
{
*(_DWORD *)(v9 + 1120) = 0;
*(_QWORD *)(a4 + 304) = 0x100000001LL;
v10 = *(_DWORD *)(v9 + 496);
v46 = 0;
v49 = LC1;
v50 = LC1;
*(_QWORD *)(v9 + 2320) = 0LL;
*(_QWORD *)(v9 + 2096) = LC2;
*(_QWORD *)(v9 + 2120) = LC2;
*(_QWORD *)(v9 + 2016) = LC2;
*(_QWORD *)(v9 + 2064) = LC2;
*(_QWORD *)(v9 + 2040) = LC2;
if ( v10 <= 0 )
goto LABEL_42;
v11 = 1;
v30 = v9 + 1864;
v28 = v9 + 1872;
v29 = v9 + 944;
v27 = v9 + 152;
v31 = v9 + 352;
v32 = v9 + 496;
v12 = v9;
v13 = v9 + 1088;
v14 = v12;
do
{
*(_DWORD *)(v14 + 500) = v11;
a1[337] = v11;
cputime(v30);
if ( !v46 )
{
v17 = *(double *)(v14 + 2096)
+ *(double *)(v14 + 2120)
+ *(double *)(v14 + 2016)
+ *(double *)(v14 + 2064)
+ *(double *)(v14 + 2040);
v51 = v17;
if ( v37 > 1 )
{
v53 = v17;
Allreduce(&v53, &v51, 1LL, 1LL, 1LL, 0LL, v40);
}
if ( *(_DWORD *)(v14 + 112) == 1 )
{
min_STD_cp(a1, a2, v14, a4, v33);
cp_shuffle_states(a4, v33);
}
if ( *(_DWORD *)(v14 + 116) == 1 )
{
min_CG_cp(a1, a2, v14, a4, v33);
*(_DWORD *)(a4 + 304) = 0;
}
if ( *(_DWORD *)(v14 + 120) == 1 )
{
min_DIIS_cp(a1, a2, v14, a4, 0LL, v33);
*(_DWORD *)(a4 + 308) = 0;
}
v18 = *(double *)(v14 + 2096)
+ *(double *)(v14 + 2120)
+ *(double *)(v14 + 2016)
+ *(double *)(v14 + 2064)
+ *(double *)(v14 + 2040);
v52 = v18;
*(_QWORD *)&v38 = COERCE_UNSIGNED_INT64(v18 - v51) & LC4;
if ( v37 > 1 )
{
v54[0] = v18;
Allreduce(v54, &v52, 1LL, 1LL, 1LL, 0LL, v40);
}
check_coef_grad_mag(a4, v14, &v49, &v50, &v47, &v48, *(double *)(v14 + 136), v33, v33, v13);
if ( v48 == 1 )
{
if ( v41 <= 1 )
{
puts("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
puts("Tolerance on coefficient forces reached");
puts("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}
else
{
puts("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
printf("Tolerance on coefficient forces reached on processor %d\n", v43);
puts("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}
v46 = 1;
}
else if ( v47 == 1 && *(_DWORD *)(v14 + 116) == 1 && v52 - v51 > 0.0 )
{
*(_DWORD *)(a4 + 304) = 1;
if ( v41 <= 1 )
{
puts("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
puts("Resetting CP Conjugate Gradient");
puts("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}
else
{
puts("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
printf("Resetting CP Conjugate Gradient on processor %d\n", v43);
puts("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}
cp_shuffle_states(a4, v33);
}
}
cputime(v28);
v19 = v13;
v20 = *(double *)(v14 + 1872) - *(double *)(v14 + 1864);
*(double *)(v14 + 1888) = v20;
*(double *)(v14 + 1880) = v20 + *(double *)(v14 + 1880);
simpavg_cp_pimd(v32, v13, v31, a2 + 896, v27, v14, v29, a4, a1 + 808);
if ( !v25 )
check_auto_exit(v14 + 544);
if ( v36 > 1 )
{
v19 = 1LL;
Bcast(v14 + 544, 1LL, 1LL, 0LL, v39);
}
if ( v11 % *(_DWORD *)(v14 + 272) )
{
v15 = (unsigned int)(v11 >> 31);
LODWORD(v15) = v11 % *(_DWORD *)(v14 + 280);
v16 = (unsigned int)v15;
if ( (_DWORD)v15 )
{
v15 = (unsigned int)(v11 >> 31);
LODWORD(v15) = v11 % *(_DWORD *)(v14 + 292);
if ( (_DWORD)v15 )
{
v15 = (unsigned int)(v11 >> 31);
LODWORD(v15) = v11 % *(_DWORD *)(v14 + 300);
if ( (_DWORD)v15 )
{
v15 = (unsigned int)(v11 >> 31);
LODWORD(v15) = v11 % *(_DWORD *)(v14 + 288);
if ( (_DWORD)v15 )
{
v15 = (unsigned int)(v11 >> 31);
LODWORD(v15) = v11 % *(_DWORD *)(v14 + 276);
if ( (_DWORD)v15 )
goto LABEL_14;
}
}
}
}
*(_DWORD *)(v14 + 308) = 0;
if ( v34 )
{
if ( !v25 )
goto LABEL_13;
goto LABEL_38;
}
}
else
{
*(_DWORD *)(v14 + 308) = 0;
v15 = v34;
if ( v34 )
goto LABEL_36;
}
communicate_output_pimd(a1, v19, v15, v16);
if ( !(v11 % *(_DWORD *)(v14 + 272)) )
LABEL_36:
output_cp_min(a1, v14, a2, a4, v46, v38);
LODWORD(v16) = v11 % *(_DWORD *)(v14 + 280);
if ( !v25 )
{
LABEL_13:
if ( (_DWORD)v16 )
goto LABEL_14;
write_dump_file_cp_pimd_class(a1, a2, v14, a4);
LODWORD(v16) = v11 % *(_DWORD *)(v14 + 280);
}
LABEL_38:
if ( !(_DWORD)v16 )
{
control_coef_transpose_bck(a4, 1LL);
write_dump_file_cp_pimd(a1, a2, v14, a4);
control_coef_transpose_fwd(a4, 1LL);
}
LABEL_14:
analysis_cp_pimd(a1, a2, v14, a4, a5);
v45 = 0;
if ( v26 <= 1 )
{
v45 = v46;
if ( v26 == v46 )
break;
goto LABEL_16;
}
Allreduce(&v46, &v45, 1LL, 1LL, 1LL, 0LL, v39);
if ( v26 == v45 )
break;
LABEL_16:
++v11;
}
while ( *(_DWORD *)(v14 + 496) >= v11 );
v9 = v14;
LABEL_42:
if ( !v34 )
communicate_output_pimd(a1, 0LL, a3, a4);
if ( !v25 )
write_dump_file_cp_pimd_class(a1, a2, v9, a4);
control_coef_transpose_bck(a4, 1LL);
write_dump_file_cp_pimd(a1, a2, v9, a4);
control_coef_transpose_fwd(a4, 1LL);
if ( v46 != 1 )
{
puts("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
printf("Out of time on bead number %d on processor number %d\n", v33, v25);
puts("before convergence. Restart your job and allow more steps/bead");
puts("Don't panic, I have saved your results in the dump files ");
puts("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
fflush(stdout);
exit(1);
}
result = ++v33;
}
while ( v42 >= (int)v33 );
LABEL_48:
if ( v44 == 1 )
{
v23 = 79;
do
{
putchar(45);
--v23;
}
while ( v23 );
v24 = 79;
putchar(10);
puts("Completed CP-MINIMIZATION run ");
do
{
putchar(61);
--v24;
}
while ( v24 );
result = putchar(10);
}
return result;
}

canonical_decompiled_code:
int __fastcall func0(_DWORD *a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
int result; // eax
__int64 v9; // rbp
int v10; // esi
int v11; // ebx
__int64 v12; // rax
__int64 v13; // rbp
__int64 v14; // r12
__int64 v15; // rdx
__int64 v16; // rcx
double v17; // xmm0_8
double v18; // xmm0_8
__int64 v19; // rsi
double v20; // xmm0_8
int v21; // ebx
int v22; // ebx
int v23; // ebx
int v24; // ebx
unsigned int v25; // [rsp+0h] [rbp-108h]
int v26; // [rsp+4h] [rbp-104h]
__int64 v27; // [rsp+8h] [rbp-100h]
__int64 v28; // [rsp+10h] [rbp-F8h]
__int64 v29; // [rsp+18h] [rbp-F0h]
__int64 v30; // [rsp+28h] [rbp-E0h]
__int64 v31; // [rsp+38h] [rbp-D0h]
__int64 v32; // [rsp+40h] [rbp-C8h]
unsigned int v33; // [rsp+48h] [rbp-C0h]
unsigned int v34; // [rsp+4Ch] [rbp-BCh]
int v36; // [rsp+58h] [rbp-B0h]
int v37; // [rsp+5Ch] [rbp-ACh]
double v38; // [rsp+60h] [rbp-A8h]
unsigned int v39; // [rsp+78h] [rbp-90h]
unsigned int v40; // [rsp+7Ch] [rbp-8Ch]
int v41; // [rsp+80h] [rbp-88h]
int v42; // [rsp+84h] [rbp-84h]
unsigned int v43; // [rsp+88h] [rbp-80h]
int v44; // [rsp+8Ch] [rbp-7Ch]
unsigned int v45; // [rsp+90h] [rbp-78h] BYREF
unsigned int v46; // [rsp+94h] [rbp-74h] BYREF
int v47; // [rsp+98h] [rbp-70h] BYREF
int v48; // [rsp+9Ch] [rbp-6Ch] BYREF
__int64 v49; // [rsp+A0h] [rbp-68h] BYREF
__int64 v50; // [rsp+A8h] [rbp-60h] BYREF
double v51; // [rsp+B0h] [rbp-58h] BYREF
double v52; // [rsp+B8h] [rbp-50h] BYREF
double v53; // [rsp+C0h] [rbp-48h] BYREF
double v54[8]; // [rsp+C8h] [rbp-40h] BYREF

v42 = a1[2];
v39 = a1[822];
v25 = a1[813];
v36 = *(_DWORD *)(a4 + 2832);
v34 = a1[818];
v37 = *(_DWORD *)(a4 + 2812);
v43 = a1[816];
v40 = a1[825];
v26 = a1[814];
v41 = a1[808];
result = *(_DWORD *)(a3 + 4368);
v44 = result;
if ( result == 1 )
{
v21 = 79;
do
{
putchar(61);
--v21;
}
while ( v21 );
v22 = 79;
putchar(10);
puts("Running CP-MINIMIZATION ");
do
{
putchar(45);
--v22;
}
while ( v22 );
result = putchar(10);
}
if ( v42 <= 0 )
goto LABEL_48;
v33 = 1;
v9 = a3;
do
{
*(_DWORD *)(v9 + 1120) = 0;
*(_QWORD *)(a4 + 304) = 0x100000001LL;
v10 = *(_DWORD *)(v9 + 496);
v46 = 0;
v49 = LC1;
v50 = LC1;
*(_QWORD *)(v9 + 2320) = 0LL;
*(_QWORD *)(v9 + 2096) = LC2;
*(_QWORD *)(v9 + 2120) = LC2;
*(_QWORD *)(v9 + 2016) = LC2;
*(_QWORD *)(v9 + 2064) = LC2;
*(_QWORD *)(v9 + 2040) = LC2;
if ( v10 <= 0 )
goto LABEL_42;
v11 = 1;
v30 = v9 + 1864;
v28 = v9 + 1872;
v29 = v9 + 944;
v27 = v9 + 152;
v31 = v9 + 352;
v32 = v9 + 496;
v12 = v9;
v13 = v9 + 1088;
v14 = v12;
do
{
*(_DWORD *)(v14 + 500) = v11;
a1[337] = v11;
cputime(v30);
if ( !v46 )
{
v17 = *(double *)(v14 + 2096)
+ *(double *)(v14 + 2120)
+ *(double *)(v14 + 2016)
+ *(double *)(v14 + 2064)
+ *(double *)(v14 + 2040);
v51 = v17;
if ( v37 > 1 )
{
v53 = v17;
Allreduce(&v53, &v51, 1LL, 1LL, 1LL, 0LL, v40);
}
if ( *(_DWORD *)(v14 + 112) == 1 )
{
min_STD_cp(a1, a2, v14, a4, v33);
cp_shuffle_states(a4, v33);
}
if ( *(_DWORD *)(v14 + 116) == 1 )
{
min_CG_cp(a1, a2, v14, a4, v33);
*(_DWORD *)(a4 + 304) = 0;
}
if ( *(_DWORD *)(v14 + 120) == 1 )
{
min_DIIS_cp(a1, a2, v14, a4, 0LL, v33);
*(_DWORD *)(a4 + 308) = 0;
}
v18 = *(double *)(v14 + 2096)
+ *(double *)(v14 + 2120)
+ *(double *)(v14 + 2016)
+ *(double *)(v14 + 2064)
+ *(double *)(v14 + 2040);
v52 = v18;
*(_QWORD *)&v38 = COERCE_UNSIGNED_INT64(v18 - v51) & LC4;
if ( v37 > 1 )
{
v54[0] = v18;
Allreduce(v54, &v52, 1LL, 1LL, 1LL, 0LL, v40);
}
check_coef_grad_mag(a4, v14, &v49, &v50, &v47, &v48, *(double *)(v14 + 136), v33, v33, v13);
if ( v48 == 1 )
{
if ( v41 <= 1 )
{
puts("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
puts("Tolerance on coefficient forces reached");
puts("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}
else
{
puts("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
printf("Tolerance on coefficient forces reached on processor %d\n", v43);
puts("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}
v46 = 1;
}
else if ( v47 == 1 && *(_DWORD *)(v14 + 116) == 1 && v52 - v51 > 0.0 )
{
*(_DWORD *)(a4 + 304) = 1;
if ( v41 <= 1 )
{
puts("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
puts("Resetting CP Conjugate Gradient");
puts("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}
else
{
puts("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
printf("Resetting CP Conjugate Gradient on processor %d\n", v43);
puts("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}
cp_shuffle_states(a4, v33);
}
}
cputime(v28);
v19 = v13;
v20 = *(double *)(v14 + 1872) - *(double *)(v14 + 1864);
*(double *)(v14 + 1888) = v20;
*(double *)(v14 + 1880) = v20 + *(double *)(v14 + 1880);
simpavg_cp_pimd(v32, v13, v31, a2 + 896, v27, v14, v29, a4, a1 + 808);
if ( !v25 )
check_auto_exit(v14 + 544);
if ( v36 > 1 )
{
v19 = 1LL;
Bcast(v14 + 544, 1LL, 1LL, 0LL, v39);
}
if ( v11 % *(_DWORD *)(v14 + 272) )
{
v15 = (unsigned int)(v11 >> 31);
LODWORD(v15) = v11 % *(_DWORD *)(v14 + 280);
v16 = (unsigned int)v15;
if ( (_DWORD)v15 )
{
v15 = (unsigned int)(v11 >> 31);
LODWORD(v15) = v11 % *(_DWORD *)(v14 + 292);
if ( (_DWORD)v15 )
{
v15 = (unsigned int)(v11 >> 31);
LODWORD(v15) = v11 % *(_DWORD *)(v14 + 300);
if ( (_DWORD)v15 )
{
v15 = (unsigned int)(v11 >> 31);
LODWORD(v15) = v11 % *(_DWORD *)(v14 + 288);
if ( (_DWORD)v15 )
{
v15 = (unsigned int)(v11 >> 31);
LODWORD(v15) = v11 % *(_DWORD *)(v14 + 276);
if ( (_DWORD)v15 )
goto LABEL_14;
}
}
}
}
*(_DWORD *)(v14 + 308) = 0;
if ( v34 )
{
if ( !v25 )
goto LABEL_13;
goto LABEL_38;
}
}
else
{
*(_DWORD *)(v14 + 308) = 0;
v15 = v34;
if ( v34 )
goto LABEL_36;
}
communicate_output_pimd(a1, v19, v15, v16);
if ( !(v11 % *(_DWORD *)(v14 + 272)) )
LABEL_36:
output_cp_min(a1, v14, a2, a4, v46, v38);
LODWORD(v16) = v11 % *(_DWORD *)(v14 + 280);
if ( !v25 )
{
LABEL_13:
if ( (_DWORD)v16 )
goto LABEL_14;
write_dump_file_cp_pimd_class(a1, a2, v14, a4);
LODWORD(v16) = v11 % *(_DWORD *)(v14 + 280);
}
LABEL_38:
if ( !(_DWORD)v16 )
{
control_coef_transpose_bck(a4, 1LL);
write_dump_file_cp_pimd(a1, a2, v14, a4);
control_coef_transpose_fwd(a4, 1LL);
}
LABEL_14:
analysis_cp_pimd(a1, a2, v14, a4, a5);
v45 = 0;
if ( v26 <= 1 )
{
v45 = v46;
if ( v26 == v46 )
break;
goto LABEL_16;
}
Allreduce(&v46, &v45, 1LL, 1LL, 1LL, 0LL, v39);
if ( v26 == v45 )
break;
LABEL_16:
++v11;
}
while ( *(_DWORD *)(v14 + 496) >= v11 );
v9 = v14;
LABEL_42:
if ( !v34 )
communicate_output_pimd(a1, 0LL, a3, a4);
if ( !v25 )
write_dump_file_cp_pimd_class(a1, a2, v9, a4);
control_coef_transpose_bck(a4, 1LL);
write_dump_file_cp_pimd(a1, a2, v9, a4);
control_coef_transpose_fwd(a4, 1LL);
if ( v46 != 1 )
{
puts("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
printf("Out of time on bead number %d on processor number %d\n", v33, v25);
puts("before convergence. Restart your job and allow more steps/bead");
puts("Don't panic, I have saved your results in the dump files ");
puts("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
fflush(stdout);
exit(1);
}
result = ++v33;
}
while ( v42 >= (int)v33 );
LABEL_48:
if ( v44 == 1 )
{
v23 = 79;
do
{
putchar(45);
--v23;
}
while ( v23 );
v24 = 79;
putchar(10);
puts("Completed CP-MINIMIZATION run ");
do
{
putchar(61);
--v24;
}
while ( v24 );
result = putchar(10);
}
return result;
}

original_code:
void control_cp_pimd_min(CLASS *class,BONDED *bonded,
                         GENERAL_DATA *general_data,CP *cp,
                         ANALYSIS *analysis)
{
  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};
  double fc_mag_up,fc_mag_dn,elec_e_old,elec_e;
  double elec_e_old_tmp,elec_e_tmp;
  double Delta_E;
  int ncoef_tot,i,itime,iii,ip,iexit_tot;
  int atm_min;
  int iexit;
  int ireset,idone;
  int iatm_count;
  int pi_beads = class->clatoms_info.pi_beads;
  int pi_beads_proc = class->clatoms_info.pi_beads_proc;
  int myid = class->communicate.myid;
  int myid_state = class->communicate.myid_state;
  int myid_bead = class->communicate.myid_bead;
  int nproc = class->communicate.np;
  int nproc_beads = class->communicate.np_beads;
  int error_check_on = general_data->error_check_on;
  int world = class->communicate.world;
  int num_proc = cp->communicate.np;
  int np_states = cp->communicate.np_states;
  int comm_states = class->communicate.comm_states;
  double gamma,delta_E_elec;
  int ifirst_elec;
 if(error_check_on==1){
  {int i;for(i=0;i<=78;i++){printf("=");}printf("\n");};
  printf("Running CP-MINIMIZATION \n");
  {int i;for(i=0;i<=78;i++){printf("-");}printf("\n");};
 }
 for(ip=1;ip<=pi_beads_proc;ip++){
   iexit = 0;
   iatm_count = 0;
   atm_min=0;
   general_data->stat_avg.write_cp_atm_flag = 0;
   cp->cpcoeffs_info.cg_reset_flag = 1;
   cp->cpcoeffs_info.diis_reset_flag = 1;
   fc_mag_up = 10000.0;
   fc_mag_dn = 10000.0;
   general_data->stat_avg.cp_eke = 1000.0;
   general_data->stat_avg.cp_enl = 1000.0;
   general_data->stat_avg.cp_ehart = 1000.0;
   general_data->stat_avg.cp_exc = 1000.0;
   general_data->stat_avg.cp_eext = 1000.0;
   general_data->stat_avg.count_diag_srot = 0.0;
   for(itime = 1;itime<=(general_data->timeinfo.ntime);itime++){
    general_data->timeinfo.itime = itime;
    class->energy_ctrl.itime = itime;
    cputime(&(general_data->stat_avg.cpu1));
    if(iexit==0){
      elec_e_old = general_data->stat_avg.cp_eke
                     + general_data->stat_avg.cp_enl
                     + general_data->stat_avg.cp_ehart
                     + general_data->stat_avg.cp_exc
                     + general_data->stat_avg.cp_eext;
      if(np_states>1){
       elec_e_old_tmp = elec_e_old;
       Allreduce(&(elec_e_old_tmp),&(elec_e_old),1,MPI_DOUBLE,MPI_SUM,0,
                 comm_states);
      }
      if(general_data->minopts.cp_min_std==1){
         min_STD_cp(class,bonded,general_data,cp,ip);
         cp_shuffle_states(cp,ip);
      }
      if(general_data->minopts.cp_min_cg == 1) {
         min_CG_cp(class,bonded,general_data,cp,ip);
         cp->cpcoeffs_info.cg_reset_flag = 0;
      }
      if(general_data->minopts.cp_min_diis == 1) {
         min_DIIS_cp(class,bonded,general_data,cp,iatm_count,ip);
         cp->cpcoeffs_info.diis_reset_flag = 0;
      }
      elec_e = general_data->stat_avg.cp_eke
                     + general_data->stat_avg.cp_enl
                     + general_data->stat_avg.cp_ehart
                     + general_data->stat_avg.cp_exc
                     + general_data->stat_avg.cp_eext;
      Delta_E = fabs(elec_e - elec_e_old);
      if(np_states>1){
       elec_e_tmp = elec_e;
       Allreduce(&(elec_e_tmp),&(elec_e),1,MPI_DOUBLE,MPI_SUM,0,comm_states);
      }
      check_coef_grad_mag(cp,&(general_data->simopts),
                          &fc_mag_up,&fc_mag_dn,&ireset,&idone,
                          general_data->minopts.tol_coef,ip,ip,
                          &(general_data->stat_avg));
      if(idone==1){
        if(nproc_beads > 1) {
           printf("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
           printf("Tolerance on coefficient forces reached on processor %d\n",
                   myid_bead);
           printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
        } else {
           printf("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
           printf("Tolerance on coefficient forces reached\n");
           printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
        }
        iexit = 1;
      }else{
         if((ireset==1)&&(general_data->minopts.cp_min_cg==1)&&
            (elec_e-elec_e_old)>0){
           cp->cpcoeffs_info.cg_reset_flag = 1;
           if(nproc_beads > 1 ){
              printf("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
              printf("Resetting CP Conjugate Gradient on processor %d\n",myid_bead);
              printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
           } else {
              printf("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
              printf("Resetting CP Conjugate Gradient\n");
              printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
           }
          cp_shuffle_states(cp,ip);
         }
      }
    }
      cputime(&(general_data->stat_avg.cpu2));
      (general_data->stat_avg.cpu_now)=(general_data->stat_avg.cpu2)-
                                       (general_data->stat_avg.cpu1);
      (general_data->stat_avg.acpu) += (general_data->stat_avg.cpu2)-
                                       (general_data->stat_avg.cpu1);
    simpavg_cp_pimd(&(general_data->timeinfo),&(general_data->stat_avg),
                    &(general_data->cell),&(bonded->constrnt),
                    &(general_data->ensopts),&(general_data->simopts),
                    &(general_data->ptens),cp,&(class->communicate));
    if(myid==0) check_auto_exit(&(general_data->timeinfo.exit_flag));
    if(num_proc > 1) Bcast(&(general_data->timeinfo.exit_flag),1,MPI_INT,0,world);
    if( (itime % (general_data->filenames.iwrite_screen))==0 ||
         (itime % (general_data->filenames.iwrite_dump ))==0 ||
         (itime % (general_data->filenames.iwrite_confp ))==0 ||
         (itime % (general_data->filenames.iwrite_confc ))==0 ||
         (itime % (general_data->filenames.iwrite_confv)) ==0 ||
         (itime % (general_data->filenames.iwrite_inst)) ==0 ){
         general_data->filenames.ifile_open = 0;
         if(myid_state==0){
            communicate_output_pimd(class);
  }
         if((itime % general_data->filenames.iwrite_screen) == 0){
            output_cp_min(class,general_data,bonded,cp,Delta_E,iexit);
         }
         if(myid==0 && (itime % general_data->filenames.iwrite_dump)==0){
             write_dump_file_cp_pimd_class(class,bonded,general_data,cp);
         }
         if((itime % general_data->filenames.iwrite_dump)==0){
           control_coef_transpose_bck(cp,1);
           write_dump_file_cp_pimd(class,bonded,general_data,cp);
           control_coef_transpose_fwd(cp,1);
         }
    }
    analysis_cp_pimd(class,bonded,general_data,cp,analysis);
    iexit_tot = 0;
  if(nproc > 1){
    Allreduce(&iexit,&iexit_tot,1,MPI_INT,MPI_SUM,0,world);
  }else{
      iexit_tot = iexit;
  }
    if(iexit_tot==nproc){break;}
   }
   if(myid_state==0){
     communicate_output_pimd(class);
   }
   if(myid==0){
     write_dump_file_cp_pimd_class(class,bonded,general_data,cp);
   }
   control_coef_transpose_bck(cp,1);
     write_dump_file_cp_pimd(class,bonded,general_data,cp);
   control_coef_transpose_fwd(cp,1);
   if(iexit!=1){
    printf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
    printf("Out of time on bead number %d on processor number %d\n",ip,myid);
    printf("before convergence. Restart your job and allow more steps/bead\n");
    printf("Don't panic, I have saved your results in the dump files \n");
    printf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
    fflush(stdout);
    exit(1);
    Finalize();
   }
 }
  if(error_check_on==1){
    {int i;for(i=0;i<=78;i++){printf("-");}printf("\n");};
    printf("Completed CP-MINIMIZATION run \n");
    {int i;for(i=0;i<=78;i++){printf("=");}printf("\n");};
  }
   }

canonical_original_code:
void control_cp_pimd_min(struct class *class, struct bonded *bonded, struct general_data *general_data, struct cp *cp, struct analysis *analysis)
{
  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};
  double fc_mag_up; double fc_mag_dn; double elec_e_old; double elec_e;
  double elec_e_old_tmp; double elec_e_tmp;
  double Delta_E;
  int ncoef_tot; int i; int itime; int iii; int ip; int iexit_tot;
  int atm_min;
  int iexit;
  int ireset; int idone;
  int iatm_count;
  int pi_beads = class->clatoms_info.pi_beads;
  int pi_beads_proc = class->clatoms_info.pi_beads_proc;
  int myid = class->communicate.myid;
  int myid_state = class->communicate.myid_state;
  int myid_bead = class->communicate.myid_bead;
  int nproc = class->communicate.np;
  int nproc_beads = class->communicate.np_beads;
  int error_check_on = general_data->error_check_on;
  int world = class->communicate.world;
  int num_proc = cp->communicate.np;
  int np_states = cp->communicate.np_states;
  int comm_states = class->communicate.comm_states;
  double gamma; double delta_E_elec;
  int ifirst_elec;
 if(error_check_on==1){
  {int i;for(i=0;i<=78;i++){printf("=");}printf("\n");};
  printf("Running CP-MINIMIZATION \n");
  {int i;for(i=0;i<=78;i++){printf("-");}printf("\n");};
 }
 for(ip=1;ip<=pi_beads_proc;ip++){
   iexit = 0;
   iatm_count = 0;
   atm_min=0;
   general_data->stat_avg.write_cp_atm_flag = 0;
   cp->cpcoeffs_info.cg_reset_flag = 1;
   cp->cpcoeffs_info.diis_reset_flag = 1;
   fc_mag_up = 10000.0;
   fc_mag_dn = 10000.0;
   general_data->stat_avg.cp_eke = 1000.0;
   general_data->stat_avg.cp_enl = 1000.0;
   general_data->stat_avg.cp_ehart = 1000.0;
   general_data->stat_avg.cp_exc = 1000.0;
   general_data->stat_avg.cp_eext = 1000.0;
   general_data->stat_avg.count_diag_srot = 0.0;
   for(itime = 1;itime<=(general_data->timeinfo.ntime);itime++){
    general_data->timeinfo.itime = itime;
    class->energy_ctrl.itime = itime;
    cputime(&(general_data->stat_avg.cpu1));
    if(iexit==0){
      elec_e_old = general_data->stat_avg.cp_eke
                     + general_data->stat_avg.cp_enl
                     + general_data->stat_avg.cp_ehart
                     + general_data->stat_avg.cp_exc
                     + general_data->stat_avg.cp_eext;
      if(np_states>1){
       elec_e_old_tmp = elec_e_old;
       Allreduce(&(elec_e_old_tmp),&(elec_e_old),1,MPI_DOUBLE,MPI_SUM,0,
                 comm_states);
      }
      if(general_data->minopts.cp_min_std==1){
         min_STD_cp(class,bonded,general_data,cp,ip);
         cp_shuffle_states(cp,ip);
      }
      if(general_data->minopts.cp_min_cg == 1) {
         min_CG_cp(class,bonded,general_data,cp,ip);
         cp->cpcoeffs_info.cg_reset_flag = 0;
      }
      if(general_data->minopts.cp_min_diis == 1) {
         min_DIIS_cp(class,bonded,general_data,cp,iatm_count,ip);
         cp->cpcoeffs_info.diis_reset_flag = 0;
      }
      elec_e = general_data->stat_avg.cp_eke
                     + general_data->stat_avg.cp_enl
                     + general_data->stat_avg.cp_ehart
                     + general_data->stat_avg.cp_exc
                     + general_data->stat_avg.cp_eext;
      Delta_E = fabs(elec_e - elec_e_old);
      if(np_states>1){
       elec_e_tmp = elec_e;
       Allreduce(&(elec_e_tmp),&(elec_e),1,MPI_DOUBLE,MPI_SUM,0,comm_states);
      }
      check_coef_grad_mag(cp,&(general_data->simopts),
                          &fc_mag_up,&fc_mag_dn,&ireset,&idone,
                          general_data->minopts.tol_coef,ip,ip,
                          &(general_data->stat_avg));
      if(idone==1){
        if(nproc_beads > 1) {
           printf("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
           printf("Tolerance on coefficient forces reached on processor %d\n",
                   myid_bead);
           printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
        } else {
           printf("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
           printf("Tolerance on coefficient forces reached\n");
           printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
        }
        iexit = 1;
      }else{
         if((ireset==1)&&(general_data->minopts.cp_min_cg==1)&&
            (elec_e-elec_e_old)>0){
           cp->cpcoeffs_info.cg_reset_flag = 1;
           if(nproc_beads > 1 ){
              printf("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
              printf("Resetting CP Conjugate Gradient on processor %d\n",myid_bead);
              printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
           } else {
              printf("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
              printf("Resetting CP Conjugate Gradient\n");
              printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
           }
          cp_shuffle_states(cp,ip);
         }
      }
    }
      cputime(&(general_data->stat_avg.cpu2));
      (general_data->stat_avg.cpu_now)=(general_data->stat_avg.cpu2)-
                                       (general_data->stat_avg.cpu1);
      (general_data->stat_avg.acpu) += (general_data->stat_avg.cpu2)-
                                       (general_data->stat_avg.cpu1);
    simpavg_cp_pimd(&(general_data->timeinfo),&(general_data->stat_avg),
                    &(general_data->cell),&(bonded->constrnt),
                    &(general_data->ensopts),&(general_data->simopts),
                    &(general_data->ptens),cp,&(class->communicate));
    if(myid==0) check_auto_exit(&(general_data->timeinfo.exit_flag));
    if(num_proc > 1) Bcast(&(general_data->timeinfo.exit_flag),1,MPI_INT,0,world);
    if( (itime % (general_data->filenames.iwrite_screen))==0 ||
         (itime % (general_data->filenames.iwrite_dump ))==0 ||
         (itime % (general_data->filenames.iwrite_confp ))==0 ||
         (itime % (general_data->filenames.iwrite_confc ))==0 ||
         (itime % (general_data->filenames.iwrite_confv)) ==0 ||
         (itime % (general_data->filenames.iwrite_inst)) ==0 ){
         general_data->filenames.ifile_open = 0;
         if(myid_state==0){
            communicate_output_pimd(class);
  }
         if((itime % general_data->filenames.iwrite_screen) == 0){
            output_cp_min(class,general_data,bonded,cp,Delta_E,iexit);
         }
         if(myid==0 && (itime % general_data->filenames.iwrite_dump)==0){
             write_dump_file_cp_pimd_class(class,bonded,general_data,cp);
         }
         if((itime % general_data->filenames.iwrite_dump)==0){
           control_coef_transpose_bck(cp,1);
           write_dump_file_cp_pimd(class,bonded,general_data,cp);
           control_coef_transpose_fwd(cp,1);
         }
    }
    analysis_cp_pimd(class,bonded,general_data,cp,analysis);
    iexit_tot = 0;
  if(nproc > 1){
    Allreduce(&iexit,&iexit_tot,1,MPI_INT,MPI_SUM,0,world);
  }else{
      iexit_tot = iexit;
  }
    if(iexit_tot==nproc){break;}
   }
   if(myid_state==0){
     communicate_output_pimd(class);
   }
   if(myid==0){
     write_dump_file_cp_pimd_class(class,bonded,general_data,cp);
   }
   control_coef_transpose_bck(cp,1);
     write_dump_file_cp_pimd(class,bonded,general_data,cp);
   control_coef_transpose_fwd(cp,1);
   if(iexit!=1){
    printf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
    printf("Out of time on bead number %d on processor number %d\n",ip,myid);
    printf("before convergence. Restart your job and allow more steps/bead\n");
    printf("Don't panic, I have saved your results in the dump files \n");
    printf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
    fflush(stdout);
    exit(1);
    Finalize();
   }
 }
  if(error_check_on==1){
    {int i;for(i=0;i<=78;i++){printf("-");}printf("\n");};
    printf("Completed CP-MINIMIZATION run \n");
    {int i;for(i=0;i<=78;i++){printf("=");}printf("\n");};
  }
   }

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: struct analysis { struct info { int natm_real; int natm_ghost; int nmol_tot; int nmol_typ_real; int *nmol_jmol_typ_real; int *iatm_mol_typ_real; int *nmol_typ_atm_or_mol; double *masse_nmol_real; int nb_atm_typ_tot; int nb_atm_typ_ghost; int nb_atm_typ_real; int nb_atm_in_real_mol; int nb_mol_real_mol; int *natm_real_this_kind; int *natm_this_kind; int *natm_typ_real_or_ghost; int *map_atm_nb_to_atm_real_kind_nb; int *map_atm_nb_to_real_mol_or_atm; int *map_atm_nb_to_nmol_real_typ; int *nb_mol_real_jmol_typ; double *mass_real_mol; char (*name_real_mol)[50]; } info; struct pimd_bead { double **sc_op_x; double **sc_op_y; double **sc_op_z; double **sc_op_x2; double **sc_op_y2; double **sc_op_z2; double **sc_op_vx; double **sc_op_vy; double **sc_op_vz; double **sc_op_vx2; double **sc_op_vy2; double **sc_op_vz2; double ***bead_x; double ***bead_y; double ***bead_z; double ***bead_vx; double ***bead_vy; double ***bead_vz; } pimd_bead; struct rdf { int calcul_gr_on; int calcul_intra_on; int calcul_sq_from_gr_on; int njump; int periodic_write; int number_of_points; int nbk; double dr; double rmax; double dk; char *rdfname; int **iatm_pos; double *rbin; double *vol_diff; double ***rhist; double ***rhist_out; double ***gr; double ***sq; } rdf; struct velocorel { int calcul_atm_on; int ncor; int njump; int nwrite; int normalize; char *vovtname; char *output_kind; double **tmp_vtx; double **tmp_vty; double **tmp_vtz; double **vovtx; double **vovty; double **vovtz; int calcul_com_on; int ncor_com; int njump_com; int nwrite_com; int normalize_com; char *vovtname_com; char *output_kind_com; double **tmp_com_vtx; double **tmp_com_vty; double **tmp_com_vtz; double **com_vovtx; double **com_vovty; double **com_vovtz; } velocorel; struct msqdcorel { int calcul_atm_on; int ncor; int njump; char *msqdname; char *output_kind; double **tmp_msqdx; double **tmp_msqdy; double **tmp_msqdz; double **msqdx; double **msqdy; double **msqdz; } msqdcorel; struct eisf { int calcul_on; int eisf_on; } eisf; struct iikt_iso_corel { int calcul_on; int eisf_on; int ncor; int njump; int nbk_ask; int nb_kvecx; int nb_kvecy; int nb_kvecz; int full_iso; int calc_all_atm_typ; int natm_typ_calc; int natm_tot_calc; double kmin_ask; double kmax_ask; double kmin_calc_x; double kmin_calc_y; double kmin_calc_z; double dk_calc_x; double dk_calc_y; double dk_calc_z; int *natm_jmol_typ; int *map_calc_atm_on; int *map_calc_atm_typ; char *iikt_iso_name; char *output_kind; char (*list_atm_typ)[50]; double *kvec_x; double *kvec_y; double *kvec_z; double **tmp_0_tcosx; double **tmp_0_tcosy; double **tmp_0_tcosz; double **tmp_1_tcosx; double **tmp_1_tcosy; double **tmp_1_tcosz; double **tmp_0_tsinx; double **tmp_0_tsiny; double **tmp_0_tsinz; double **tmp_1_tsinx; double **tmp_1_tsiny; double **tmp_1_tsinz; double **ceisf_x; double **seisf_x; double **ceisf_y; double **seisf_y; double **ceisf_z; double **seisf_z; double **eisf_x; double **eisf_y; double **eisf_z; double ***ciikt_real_x; double ***ciikt_real_y; double ***ciikt_real_z; double ***ciikt_imag_x; double ***ciikt_imag_y; double ***ciikt_imag_z; } iikt_iso_corel; struct ickt_iso_corel { int calcul_on; int ncor; int njump; int nbk_ask; int nb_kvecx; int nb_kvecy; int nb_kvecz; int full_iso; double kmin_ask; double kmax_ask; double kmin_calc_x; double kmin_calc_y; double kmin_calc_z; double dk_calc_x; double dk_calc_y; double dk_calc_z; char *ickt_iso_name; double *kvec_x; double *kvec_y; double *kvec_z; double ***tmp_rho_real_x; double ***tmp_rho_real_y; double ***tmp_rho_real_z; double ***tmp_rho_imag_x; double ***tmp_rho_imag_y; double ***tmp_rho_imag_z; double ****cickt_real_x; double ****cickt_real_y; double ****cickt_real_z; double ****cickt_imag_x; double ****cickt_imag_y; double ****cickt_imag_z; } ickt_iso_corel; struct dip_self_corel { int calcul_on; int ncor; int njump; int normalize; char *momtname; char *output_kind; double **tmp_mx; double **tmp_my; double **tmp_mz; double **momtx; double **momty; double **momtz; } dip_self_corel; struct harmonic_analysis { int calcul_freq_on; int calcul_thermo_on; int calcul_spectra_on; int nfreqs; double delta; double *harm_freqs; } harmonic_analysis; } *

variable_types: i int

variable_types: itime int

variable_types: ip int

variable_types: iexit int

variable_types: ireset int

variable_types: idone int

variable_types: nproc int

variable_types: world int

variable_types: gamma double

return_type: void

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 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 analysis { struct info info; struct pimd_bead pimd_bead; struct rdf rdf; struct velocorel velocorel; struct msqdcorel msqdcorel; struct eisf eisf; struct iikt_iso_corel iikt_iso_corel; struct ickt_iso_corel ickt_iso_corel; struct dip_self_corel dip_self_corel; struct harmonic_analysis harmonic_analysis; }

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 constrnt { int iconstrnt; int iroll; int max_iter; double tolshake; double tolratl; }

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

user_defined_types: struct bend_free { int num; int j1; int npow; int nhist; double fk; double eq; double del; char *file; double *hist; }

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

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

user_defined_types: struct excl { int nlst; int nlst_root; int num_cp; int *num; int *j; int *j_off; int *j1_cp; }

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

user_defined_types: struct msqdcorel { int calcul_atm_on; int ncor; int njump; char *msqdname; char *output_kind; double **tmp_msqdx; double **tmp_msqdy; double **tmp_msqdz; double **msqdx; double **msqdy; double **msqdz; }

user_defined_types: struct eisf { int calcul_on; int eisf_on; }

user_defined_types: struct dip_self_corel { int calcul_on; int ncor; int njump; int normalize; char *momtname; char *output_kind; double **tmp_mx; double **tmp_my; double **tmp_mz; double **momtx; double **momty; double **momtz; }

user_defined_types: struct harmonic_analysis { int calcul_freq_on; int calcul_thermo_on; int calcul_spectra_on; int nfreqs; double delta; double *harm_freqs; }

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 cptherm_pos { double c_nhc_massiv; double **c_nhc; double **vc_nhc; double **fc_nhc; int itherm_form_up; int itherm_form_dn; }

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