# include # include # include # include # include # define MAXCHAR 256 # define COLORTEXT "YES" # define debug 0 # define MAXATOMTYPE 512 # define MAXPARM 512 # define FACTOR 6.74834256 // This program reads in a topology file and write out a new topology file suitable for polarization calculation typedef struct { char name[10]; char type[10]; double mass; double pol; double damp_factor; } ATOM; int atomnum = 0; ATOM *atom; // atom types typedef struct { char name[10]; char corr[10]; int pid; } TYPE; TYPE type[MAXPARM]; int typenum = 0; // parameters of a polarizability model typedef struct { char name[10]; double pol; double damp_factor; } PARM; PARM parm[MAXPARM]; int parmnum = 0; char ifilename[MAXCHAR]; char ofilename[MAXCHAR]; char pfilename[MAXCHAR]; char tfilename[MAXCHAR]; FILE *fpin, *fpout ; FILE *fpparm, *fptype; char line[MAXCHAR]; char tmpchar1[MAXCHAR], tmpchar2[MAXCHAR], tmpchar3[MAXCHAR]; int i,j,k=0; int tmpint1, tmpint2; int ireplace = 1; int ireadparm = 0; int ireadat = 0; int idamp_factor = 1; char model[10]; double damp_factor = -999999; int pol_flag = 0; int df_flag = 0; void rparm() { int i; int read_flag; char line[MAXCHAR]; char tmpchar[10]; if((fpparm=fopen(pfilename,"r"))==NULL) { fprintf(stdout, "\n Cannot open parm file to read: %s, exit", pfilename); exit(1); } read_flag = 0; for(;;) { if(fgets(line, MAXCHAR, fpparm)==NULL) break; if(read_flag == 0 && strncmp(line, "MODEL_ID", 8) == 0) { sscanf(&line[9], "%s", tmpchar); if(strcmp(tmpchar, model) == 0) read_flag = 1; continue; } if(read_flag == 1 && strncmp(line, "MODEL_ID", 8) == 0) { read_flag = 0; break; } if(read_flag == 1) { if(strncmp(line, "SCREEN_LENGTH", 13) == 0) sscanf(&line[14], "%lf", &damp_factor); if(strncmp(line, "PARM", 4) == 0) { parm[parmnum].damp_factor = damp_factor; sscanf(&line[4], "%s%lf%lf", parm[parmnum].name, &parm[parmnum].pol, &parm[parmnum].damp_factor); parm[parmnum].pol /= FACTOR ; parmnum++; } } } if(debug == 1) { for(i=0;i=atomnum) { flag = -999; break; } } } if(flag ==3) { for(j=0;j<20;j++) { strcpy(str, ""); str[0] = '\0'; str[0]=line[j*4]; if(line[j*4+1] == ' ' || line[j*4+1] == '\0' || line[j*4+1] == '\n') str[1] = '\0'; else { str[1]=line[j*4+1]; if(line[j*4+2] == ' ' || line[j*4+2] == '\0' || line[j*4+2] == '\n') str[2] = '\0'; else { str[2]=line[j*4+2]; if(line[j*4+3] == ' ' || line[j*4+3] == '\0' || line[j*4+3] == '\n') str[3] = '\0'; else { str[3]=line[j*4+3]; str[4]= '\0'; } } } strcpy(atom[i].type, str); i++; if(i>=atomnum) { flag = -999; break; } } } if(flag ==5) { sscanf(line, "%lf%lf%lf%lf%lf", &v[0], &v[1], &v[2], &v[3], &v[4]); for(j=0;j<5;j++) { atom[i].pol = v[j]; i++; if(i>=atomnum) { flag = -999; break; } } } } if(ipol == 0) ireplace = 1; if(debug == 1) { for(i=0;i