diff --git a/tools/restart2data.cpp b/tools/restart2data.cpp index f2daff8c09..88b5a658c4 100644 --- a/tools/restart2data.cpp +++ b/tools/restart2data.cpp @@ -5,7 +5,7 @@ Copyright (2003) Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under + certain rights in this software. This software is distributed under the GNU General Public License. See the README file in the top-level LAMMPS directory. @@ -51,7 +51,7 @@ enum{VERSION,UNITS,NTIMESTEP,DIMENSION,NPROCS,PROCGRID_0,PROCGRID_1,PROCGRID_2, enum{MASS,SHAPE,DIPOLE}; enum{PAIR,BOND,ANGLE,DIHEDRAL,IMPROPER}; -static const char * const cg_type_list[] = +static const char * const cg_type_list[] = {"none", "lj9_6", "lj12_4", "lj12_6"}; // --------------------------------------------------------------------- @@ -191,7 +191,7 @@ class Data { int *angle_atom1,*angle_atom2,*angle_atom3; int *dihedral_atom1,*dihedral_atom2,*dihedral_atom3,*dihedral_atom4; int *improper_atom1,*improper_atom2,*improper_atom3,*improper_atom4; - + // functions Data(); @@ -345,7 +345,7 @@ int main (int argc, char **argv) double *buf = NULL; int n,m; int maxbuf = 0; - data.iatoms = data.ibonds = data.iangles = + data.iatoms = data.ibonds = data.iangles = data.idihedrals = data.iimpropers = 0; for (int iproc = 0; iproc < data.nprocs; iproc++) { @@ -410,7 +410,7 @@ int main (int argc, char **argv) fclose(fp); fclose(fp2); } - + return 0; } @@ -420,7 +420,7 @@ int main (int argc, char **argv) void header(FILE *fp, Data &data) { - char *version = "10 Sept 2010"; + char *version = "23 Nov 2010"; data.triclinic = 0; @@ -462,7 +462,7 @@ void header(FILE *fp, Data &data) // set sub-styles to 1 to N else if (flag == ATOM_STYLE) { - data.style_angle = data.style_atomic = data.style_bond = + data.style_angle = data.style_atomic = data.style_bond = data.style_charge = data.style_dipole = data.style_dpd = data.style_ellipsoid = data.style_full = data.style_granular = data.style_hybrid = data.style_molecular = data.style_peri = 0; @@ -887,7 +887,7 @@ int atom_dipole(double *buf, Data &data, int iatoms) data.mux[iatoms] = buf[m++]; data.muy[iatoms] = buf[m++]; data.muz[iatoms] = buf[m++]; - + return m; } @@ -929,7 +929,7 @@ int atom_ellipsoid(double *buf, Data &data, int iatoms) data.angmomx[iatoms] = buf[m++]; data.angmomy[iatoms] = buf[m++]; data.angmomz[iatoms] = buf[m++]; - + return m; } @@ -1018,7 +1018,7 @@ int atom_full(double *buf, Data &data, int iatoms) data.idihedrals++; } } - + n = static_cast (buf[m++]); for (int k = 0; k < n; k++) { type = static_cast (buf[m++]); @@ -1418,7 +1418,7 @@ void pair(FILE *fp, Data &data, char *style, int flag) } } } - + } else if ((strcmp(style,"coul/cut") == 0) || (strcmp(style,"coul/debye") == 0) || (strcmp(style,"coul/long") == 0)) { @@ -1523,6 +1523,39 @@ void pair(FILE *fp, Data &data, char *style, int flag) } } + } else if ((strcmp(style,"dpd/tstat") == 0) { + + double tstart = read_double(fp); + double tstop = read_double(fp); + double cut_global = read_double(fp); + int seed = read_int(fp); + int mix_flag = read_int(fp); + + if (!flag) return; + + data.pair_dpd_a0 = new double[data.ntypes+1]; + data.pair_dpd_gamma = new double[data.ntypes+1]; + + for (i = 1; i <= data.ntypes; i++) + for (j = i; j <= data.ntypes; j++) { + itmp = read_int(fp); + if (i == j && itmp == 0) { + printf("ERROR: Pair coeff %d,%d is not in restart file\n",i,j); + exit(1); + } + if (itmp) { + if (i == j) { + data.pair_dpd_a0[i] = read_double(fp); + data.pair_dpd_gamma[i] = read_double(fp); + double cut = read_double(fp); + } else { + double dpd_a0 = read_double(fp); + double dpd_gamma = read_double(fp); + double cut = read_double(fp); + } + } + } + } else if (strcmp(style,"eam") == 0) { } else if (strcmp(style,"eam/opt") == 0) { } else if (strcmp(style,"eam/alloy") == 0) { @@ -1584,7 +1617,7 @@ void pair(FILE *fp, Data &data, char *style, int flag) data.pair_gb_epsb[i] = pow(data.pair_gb_epsb[i],-mu); data.pair_gb_epsc[i] = pow(data.pair_gb_epsc[i],-mu); } - + for (j = i; j <= data.ntypes; j++) { itmp = read_int(fp); if (i == j && itmp == 0) { @@ -1724,19 +1757,25 @@ void pair(FILE *fp, Data &data, char *style, int flag) } } else if ((strcmp(style,"lj/cut") == 0) || + (strcmp(style,"lj/cut/gpu") == 0) || (strcmp(style,"lj/cut/opt") == 0) || (strcmp(style,"lj/cut/coul/cut") == 0) || + (strcmp(style,"lj/cut/coul/cut/gpu") == 0) || (strcmp(style,"lj/cut/coul/debye") == 0) || (strcmp(style,"lj/cut/coul/long") == 0) || + (strcmp(style,"lj/cut/coul/long/gpu") == 0) || (strcmp(style,"lj/cut/coul/long/tip4p") == 0) || (strcmp(style,"lj/coul") == 0)) { - if ((strcmp(style,"lj/cut") == 0) || (strcmp(style,"lj/cut/opt") == 0)) { + if ((strcmp(style,"lj/cut") == 0) || + (strcmp(style,"lj/cut/gpu") == 0) || + (strcmp(style,"lj/cut/opt") == 0)) { m = 0; double cut_lj_global = read_double(fp); int offset_flag = read_int(fp); int mix_flag = read_int(fp); - } else if (strcmp(style,"lj/cut/coul/cut") == 0) { + } else if ((strcmp(style,"lj/cut/coul/cut") == 0) || + (strcmp(style,"lj/cut/coul/cut/gpu") == 0)) { m = 1; double cut_lj_global = read_double(fp); double cut_lj_coul = read_double(fp); @@ -1749,7 +1788,8 @@ void pair(FILE *fp, Data &data, char *style, int flag) double kappa = read_double(fp); int offset_flag = read_int(fp); int mix_flag = read_int(fp); - } else if (strcmp(style,"lj/cut/coul/long") == 0) { + } else if ((strcmp(style,"lj/cut/coul/long") == 0) || + (strcmp(style,"lj/cut/coul/long/gpu") == 0)) { m = 0; double cut_lj_global = read_double(fp); double cut_lj_coul = read_double(fp); @@ -2027,8 +2067,10 @@ void pair(FILE *fp, Data &data, char *style, int flag) } } else if ((strcmp(style,"cg/cmm") == 0) || + (strcmp(style,"cg/cmm/gpu") == 0) || (strcmp(style,"cg/cmm/coul/cut") == 0) || - (strcmp(style,"cg/cmm/coul/long") == 0) ) { + (strcmp(style,"cg/cmm/coul/long") == 0) || + (strcmp(style,"cg/cmm/coul/long/gpu") == 0)) { m = 0; data.cut_lj_global = read_double(fp); data.cut_coul_global = read_double(fp); @@ -2045,14 +2087,15 @@ void pair(FILE *fp, Data &data, char *style, int flag) data.pair_cg_sigma = new double*[numtyp]; data.pair_cut_lj = new double*[numtyp]; if ((strcmp(style,"cg/cmm/coul/cut") == 0) || - (strcmp(style,"cg/cmm/coul/long") == 0) ) { + (strcmp(style,"cg/cmm/coul/long") == 0) || + (strcmp(style,"cg/cmm/coul/long/gpu") == 0)) { data.pair_cut_coul = new double*[numtyp]; m=1; } else { data.pair_cut_coul = NULL; m=0; } - + for (i = 1; i <= data.ntypes; i++) { data.pair_cg_cmm_type[i] = new int[numtyp]; data.pair_setflag[i] = new int[numtyp]; @@ -2060,13 +2103,14 @@ void pair(FILE *fp, Data &data, char *style, int flag) data.pair_cg_sigma[i] = new double[numtyp]; data.pair_cut_lj[i] = new double[numtyp]; if ((strcmp(style,"cg/cmm/coul/cut") == 0) || - (strcmp(style,"cg/cmm/coul/long") == 0) ) { + (strcmp(style,"cg/cmm/coul/long") == 0) || + (strcmp(style,"cg/cmm/coul/long/gpu") == 0)) { data.pair_cut_coul[i] = new double[numtyp]; } for (j = i; j <= data.ntypes; j++) { itmp = read_int(fp); - data.pair_setflag[i][j] = itmp; + data.pair_setflag[i][j] = itmp; if (i == j && itmp == 0) { printf("ERROR: Pair coeff %d,%d is not in restart file\n",i,j); exit(1); @@ -2080,7 +2124,7 @@ void pair(FILE *fp, Data &data, char *style, int flag) data.pair_cut_lj[i][j] = read_double(fp); data.pair_cut_coul[i][j] = read_double(fp); } - } + } } } @@ -2219,7 +2263,7 @@ void angle(FILE *fp, Data &data) data.angle_cg_cmm_sigma = new double[data.nangletypes+1]; double *angle_cg_cmm_rcut = new double[data.nangletypes+1]; data.angle_cg_cmm_type = new int[data.nangletypes+1]; - + fread(&data.angle_harmonic_k[1],sizeof(double),data.nangletypes,fp); fread(&data.angle_harmonic_theta0[1],sizeof(double),data.nangletypes,fp); fread(&data.angle_cg_cmm_epsilon[1],sizeof(double),data.nangletypes,fp); @@ -2609,7 +2653,7 @@ void Data::write(FILE *fp, FILE *fp2) { fprintf(fp,"LAMMPS data file from restart file: timestep = %d, procs = %d\n", ntimestep,nprocs); - + fprintf(fp,"\n"); fprintf(fp,"%d atoms\n",natoms); @@ -2627,7 +2671,7 @@ void Data::write(FILE *fp, FILE *fp2) if (nimpropertypes) fprintf(fp,"%d improper types\n",nimpropertypes); fprintf(fp,"\n"); - + fprintf(fp,"%-1.16e %-1.16e xlo xhi\n",xlo,xhi); fprintf(fp,"%-1.16e %-1.16e ylo yhi\n",ylo,yhi); fprintf(fp,"%-1.16e %-1.16e zlo zhi\n",zlo,zhi); @@ -2680,7 +2724,7 @@ void Data::write(FILE *fp, FILE *fp2) // pair coeffs to data file if (pair_style && fp2 == NULL) { - if ((strcmp(pair_style,"none") != 0) && + if ((strcmp(pair_style,"none") != 0) && (strcmp(pair_style,"airebo") != 0) && (strcmp(pair_style,"coul/cut") != 0) && (strcmp(pair_style,"coul/debye") != 0) && @@ -2706,21 +2750,21 @@ void Data::write(FILE *fp, FILE *fp2) (strcmp(pair_style,"hybrid") != 0) && (strcmp(pair_style,"hybrid/overlay") != 0)) fprintf(fp,"\nPair Coeffs\n\n"); - + if (strcmp(pair_style,"born/coul/long") == 0) { for (int i = 1; i <= ntypes; i++) fprintf(fp,"%d %g %g %g %g %g\n",i, pair_born_A[i],pair_born_rho[i],pair_born_sigma[i], pair_born_C[i],pair_born_D[i]); - } else if ((strcmp(pair_style,"buck") == 0) || + } else if ((strcmp(pair_style,"buck") == 0) || (strcmp(pair_style,"buck/coul/cut") == 0) || (strcmp(pair_style,"buck/coul/long") == 0) || (strcmp(pair_style,"buck/long") == 0)) { for (int i = 1; i <= ntypes; i++) fprintf(fp,"%d %g %g %g\n",i, pair_buck_A[i],pair_buck_rho[i],pair_buck_C[i]); - + } else if (strcmp(pair_style,"colloid") == 0) { for (int i = 1; i <= ntypes; i++) fprintf(fp,"%d %g %g %g %g\n",i, @@ -2731,13 +2775,19 @@ void Data::write(FILE *fp, FILE *fp2) for (int i = 1; i <= ntypes; i++) fprintf(fp,"%d %g %g\n",i, pair_dipole_epsilon[i],pair_dipole_sigma[i]); - + } else if (strcmp(pair_style,"dpd") == 0) { for (int i = 1; i <= ntypes; i++) fprintf(fp,"%d %g %g\n",i, pair_dpd_a0[i],pair_dpd_gamma[i]); - - } else if (strcmp(pair_style,"gayberne") == 0) { + + } else if ((strcmp(pair_style,"dpd/tstat") == 0) { + for (int i = 1; i <= ntypes; i++) + fprintf(fp,"%d %g\n",i, + pair_dpd_gamma[i]); + + } else if ((strcmp(pair_style,"gayberne") == 0) || + (strcmp(pair_style,"gayberne/gpu") == 0)) { for (int i = 1; i <= ntypes; i++) fprintf(fp,"%d %g %g %g %g %g %g %g %g\n",i, pair_gb_epsilon[i],pair_gb_sigma[i], @@ -2752,19 +2802,22 @@ void Data::write(FILE *fp, FILE *fp2) fprintf(fp,"%d %g %g %g %g\n",i, pair_charmm_epsilon[i],pair_charmm_sigma[i], pair_charmm_eps14[i],pair_charmm_sigma14[i]); - - } else if ((strcmp(pair_style,"lj/class2") == 0) || + + } else if ((strcmp(pair_style,"lj/class2") == 0) || (strcmp(pair_style,"lj/class2/coul/cut") == 0) || (strcmp(pair_style,"lj/class2/coul/long") == 0)) { for (int i = 1; i <= ntypes; i++) fprintf(fp,"%d %g %g\n",i, pair_class2_epsilon[i],pair_class2_sigma[i]); - - } else if ((strcmp(pair_style,"lj/cut") == 0) || + + } else if ((strcmp(pair_style,"lj/cut") == 0) || + (strcmp(pair_style,"lj/cut/gpu") == 0) || (strcmp(pair_style,"lj/cut/opt") == 0) || (strcmp(pair_style,"lj/cut/coul/cut") == 0) || + (strcmp(pair_style,"lj/cut/coul/cut/gpu") == 0) || (strcmp(pair_style,"lj/cut/coul/debye") == 0) || (strcmp(pair_style,"lj/cut/coul/long") == 0) || + (strcmp(pair_style,"lj/cut/coul/long/gpu") == 0) || (strcmp(pair_style,"lj/cut/coul/long/tip4p") == 0) || (strcmp(pair_style,"lj/coul") == 0)) { for (int i = 1; i <= ntypes; i++) @@ -2787,24 +2840,24 @@ void Data::write(FILE *fp, FILE *fp2) for (int i = 1; i <= ntypes; i++) fprintf(fp,"%d %g %g\n",i, pair_ljsmooth_epsilon[i],pair_ljsmooth_sigma[i]); - + } else if ((strcmp(pair_style,"morse") == 0) || (strcmp(pair_style,"morse/opt") == 0)) { for (int i = 1; i <= ntypes; i++) fprintf(fp,"%d %g %g %g\n",i, pair_morse_d0[i],pair_morse_alpha[i],pair_morse_r0[i]); - + } else if (strcmp(pair_style,"soft") == 0) { for (int i = 1; i <= ntypes; i++) fprintf(fp,"%d %g\n",i, pair_soft_A[i]); - + } else if (strcmp(pair_style,"yukawa") == 0) { for (int i = 1; i <= ntypes; i++) fprintf(fp,"%d %g\n",i, pair_yukawa_A[i]); - } else if ((strcmp(pair_style,"cg/cmm") == 0) || + } else if ((strcmp(pair_style,"cg/cmm") == 0) || (strcmp(pair_style,"cg/cmm/coul/cut") == 0) || (strcmp(pair_style,"cg/cmm/coul/long") == 0)) { printf("ERROR: Cannot write pair_style %s to data file\n", @@ -2817,9 +2870,11 @@ void Data::write(FILE *fp, FILE *fp2) // only supported styles = cg/cmm if (pair_style && fp2) { - if ((strcmp(pair_style,"cg/cmm") == 0) || + if ((strcmp(pair_style,"cg/cmm") == 0) || + (strcmp(pair_style,"cg/cmm/gpu") == 0) || (strcmp(pair_style,"cg/cmm/coul/cut") == 0) || - (strcmp(pair_style,"cg/cmm/coul/long") == 0)) { + (strcmp(pair_style,"cg/cmm/coul/long") == 0) || + (strcmp(pair_style,"cg/cmm/coul/long/gpu") == 0)) { for (int i = 1; i <= ntypes; i++) { for (int j = i; j <= ntypes; j++) { fprintf(fp2,"pair_coeff %d %d %s %g %g\n",i,j, @@ -2838,7 +2893,7 @@ void Data::write(FILE *fp, FILE *fp2) // bond coeffs to data file if (bond_style && fp2 == NULL) { - if ((strcmp(bond_style,"none") != 0) && + if ((strcmp(bond_style,"none") != 0) && (strcmp(bond_style,"table") != 0) && (strcmp(bond_style,"hybrid") != 0)) fprintf(fp,"\nBond Coeffs\n\n"); @@ -2907,11 +2962,11 @@ void Data::write(FILE *fp, FILE *fp2) if (angle_style && fp2 == NULL) { double PI = 3.1415926; // convert back to degrees - if ((strcmp(angle_style,"none") != 0) && + if ((strcmp(angle_style,"none") != 0) && (strcmp(angle_style,"table") != 0) && (strcmp(angle_style,"hybrid") != 0)) fprintf(fp,"\nAngle Coeffs\n\n"); - + if (strcmp(angle_style,"charmm") == 0) { for (int i = 1; i <= nangletypes; i++) fprintf(fp,"%d %g %g %g %g\n",i, @@ -2921,15 +2976,15 @@ void Data::write(FILE *fp, FILE *fp2) } else if (strcmp(angle_style,"class2") == 0) { for (int i = 1; i <= nangletypes; i++) fprintf(fp,"%d %g %g %g %g\n",i, - angle_class2_theta0[i]/PI*180.0,angle_class2_k2[i], + angle_class2_theta0[i]/PI*180.0,angle_class2_k2[i], angle_class2_k3[i],angle_class2_k4[i]); - + fprintf(fp,"\nBondBond Coeffs\n\n"); for (int i = 1; i <= nangletypes; i++) fprintf(fp,"%d %g %g %g\n",i, angle_class2_bb_k[i], angle_class2_bb_r1[i],angle_class2_bb_r2[i]); - + fprintf(fp,"\nBondAngle Coeffs\n\n"); for (int i = 1; i <= nangletypes; i++) fprintf(fp,"%d %g %g %g %g\n",i, @@ -2939,19 +2994,19 @@ void Data::write(FILE *fp, FILE *fp2) } else if (strcmp(angle_style,"cosine") == 0) { for (int i = 1; i <= nangletypes; i++) fprintf(fp,"%d %g\n",i,angle_cosine_k[i]); - + } else if ((strcmp(angle_style,"cosine/squared") == 0) || (strcmp(angle_style,"cosine/delta") == 0)) { for (int i = 1; i <= nangletypes; i++) fprintf(fp,"%d %g %g\n",i, angle_cosine_squared_k[i], angle_cosine_squared_theta0[i]/PI*180.0); - + } else if (strcmp(angle_style,"harmonic") == 0) { for (int i = 1; i <= nangletypes; i++) fprintf(fp,"%d %g %g\n",i, angle_harmonic_k[i],angle_harmonic_theta0[i]/PI*180.0); - + } else if (strcmp(angle_style,"cg/cmm") == 0) { for (int i = 1; i <= nangletypes; i++) fprintf(fp,"%d %g %g %s %g %g\n",i, @@ -2973,19 +3028,19 @@ void Data::write(FILE *fp, FILE *fp2) fprintf(fp2,"angle_coeffs %d %g %g\n",i, angle_cosine_squared_k[i], angle_cosine_squared_theta0[i]/PI*180.0); - + } else if (strcmp(angle_style,"harmonic") == 0) { for (int i = 1; i <= nangletypes; i++) fprintf(fp2,"angle_coeffs %d %g %g\n",i, angle_harmonic_k[i],angle_harmonic_theta0[i]/PI*180.0); - + } else if (strcmp(angle_style,"cg/cmm") == 0) { for (int i = 1; i <= nangletypes; i++) fprintf(fp2,"angle_coeffs %d %g %g %s %g %g\n",i, angle_harmonic_k[i],angle_harmonic_theta0[i]/PI*180.0, cg_type_list[angle_cg_cmm_type[i]],angle_cg_cmm_epsilon[i], angle_cg_cmm_sigma[i]); - + } else { printf("ERROR: Cannot write angle_style %s to input file\n", angle_style); @@ -2996,7 +3051,7 @@ void Data::write(FILE *fp, FILE *fp2) if (dihedral_style) { double PI = 3.1415926; // convert back to degrees - if ((strcmp(dihedral_style,"none") != 0) && + if ((strcmp(dihedral_style,"none") != 0) && (strcmp(dihedral_style,"table") != 0) && (strcmp(dihedral_style,"hybrid") != 0)) fprintf(fp,"\nDihedral Coeffs\n\n"); @@ -3063,7 +3118,7 @@ void Data::write(FILE *fp, FILE *fp2) dihedral_harmonic_sign[i]); } else if (strcmp(dihedral_style,"helix") == 0) { - for (int i = 1; i <= ndihedraltypes; i++) + for (int i = 1; i <= ndihedraltypes; i++) fprintf(fp,"%d %g %g %g\n",i,dihedral_helix_aphi[i], dihedral_helix_bphi[i],dihedral_helix_cphi[i]); @@ -3085,7 +3140,7 @@ void Data::write(FILE *fp, FILE *fp2) if (improper_style) { double PI = 3.1415926; // convert back to degrees - if ((strcmp(improper_style,"none") != 0) && + if ((strcmp(improper_style,"none") != 0) && (strcmp(improper_style,"hybrid") != 0)) fprintf(fp,"\nImproper Coeffs\n\n");