#include #include #include #include #include #include int type_int, mol_atom_arr[2], num_agl_atom, step, mol[1000], label[8000], agl_all[350], all_bond_stat[500]; int num_mol, num_mol_ext, label_mol[8000][6][2], bond_array[1000][1000], cycle, linear; double cell_param[3], bond_param[2], a[480000][3][2]; char name[128]; char conv(int fnumb, int dig_pos) { int s, d, e; char digit[10]; digit[0] = '0'; digit[1] = '1'; digit[2] = '2'; digit[3] = '3'; digit[4] = '4'; digit[5] = '5'; digit[6] = '6'; digit[7] = '7'; digit[8] = '8'; digit[9] = '9'; if (fnumb >= 100) s = (fnumb - fmod(fnumb, 100)) / 100; else s = 0; if (fnumb - s*100 >= 10) d = (fnumb - s*100 - fmod(fnumb - s*100, 10))/10; else d = 0; e = fnumb - s*100 - d*10; if (dig_pos == 1) return digit[e]; if (dig_pos == 2) return digit[d]; if (dig_pos == 3) return digit[s]; else return digit[0]; } void input_data(FILE *fs) { char q[64]; int i, j, k, l, m, n, inp[2], o; int atoms, number, atom_t, molecule, numb[2]; double x, y, z; l = 0; numb[0] = 0; numb[1] = 0; for (i=0; i<8000; i++) for (j=0; j<6; j++) for (k=0; k 0) { for (k=0; k 0) && (a[label_mol[i][0][0]][k][0] > 0)) { for (l=0; l 0)) { for (l=0; l 0) && (a[label_mol[i][0][0]][1][0] > 0) && (a[label_mol[i][0][0]][2][0] > 0)) { for (j=0; j 0) && (a[label_mol[i][0][0]][1][0] > 0) && (a[label_mol[i][0][0]][2][0] < 0)) { for (j=0; j 0) && (a[label_mol[i][0][0]][1][0] < 0) && (a[label_mol[i][0][0]][2][0] > 0)) { for (j=0; j 0) && (a[label_mol[i][0][0]][2][0] > 0)) { for (j=0; j 0)) { for (j=0; j 0) && (a[label_mol[i][0][0]][2][0] < 0)) { for (j=0; j 0) && (a[label_mol[i][0][0]][1][0] < 0) && (a[label_mol[i][0][0]][2][0] < 0)) { for (j=0; j 0) { bond_array[label[i]][label[j]] = (100*min - fmod(100*min, 1)); bond_array[label[j]][label[i]] = (100*min - fmod(100*min, 1)); } } } } break; case 2: for (i=0; i 0) { bond_array[label[i]][label[j]] = (100*min00 - fmod(100*min00, 1)); bond_array[label[j]][label[i]] = (100*min00 - fmod(100*min00, 1)); } } } else { min = sqrt ((a[label_mol[i][0][1]][0][1]-a[label_mol[j][0][0]][0][0])*(a[label_mol[i][0][1]][0][1]-a[label_mol[j][0][0]][0][0]) + (a[label_mol[i][0][1]][1][1]-a[label_mol[j][0][0]][1][0])*(a[label_mol[i][0][1]][1][1]-a[label_mol[j][0][0]][1][0]) + (a[label_mol[i][0][1]][2][1]-a[label_mol[j][0][0]][2][0])*(a[label_mol[i][0][1]][2][1]-a[label_mol[j][0][0]][2][0])); h = 0; while (label_mol[i][h][1] != 10000) { k = 0; while (label_mol[j][k][0] != 10000) { leng = sqrt ((a[label_mol[i][h][1]][0][1]-a[label_mol[j][k][0]][0][0])*(a[label_mol[i][h][1]][0][1]-a[label_mol[j][k][0]][0][0]) + (a[label_mol[i][h][1]][1][1]-a[label_mol[j][k][0]][1][0])*(a[label_mol[i][h][1]][1][1]-a[label_mol[j][k][0]][1][0]) + (a[label_mol[i][h][1]][2][1]-a[label_mol[j][k][0]][2][0])*(a[label_mol[i][h][1]][2][1]-a[label_mol[j][k][0]][2][0])); if (leng < min) min = leng; k++; } h++; } if (min < bond_param[1]) { k = 1; for (l=0; l 0) { bond_array[label[i]][label[j]] = (100*min00 - fmod(100*min00, 1)); bond_array[label[j]][label[i]] = (100*min00 - fmod(100*min00, 1)); } } } } } } break; } p = num_mol; for (i=0; i 0) { x = 0; k = 0; while ((bin[x] == 0) && (x 0) { l = bond_array[label_bond[i][j]][bond[label_bond[i][j]][k]]; all_bond_stat[l-1]++; q[0] = conv (l, 1); q[1] = conv (l, 2); q[2] = conv (l, 3); fprintf (fo, "( %c.%c%c)", q[2], q[1], q[0]); } } fprintf (fo, "\n"); } i++; } fprintf (fo, "____________________________________________________________\n"); } void all_stat(FILE *fo, int chs) { int i; double k, l, t[2]; char q[3]; fprintf (fo, "\nSUMMARY STATISTIC:\n"); for (i=0; i<250; i++) if (agl_all[i] != 0) { t[0] = agl_all[i]; t[1] = step; k = t[0] / t[1]; t[1] = t[1] * num_mol; l = t[0] / t[1] * (i+1); fprintf (fo, "%3i - %7i %7.2f %8.5f\n", i+1, agl_all[i], k, l); } if (chs > 0) { fprintf (fo, "____________________\n"); k = 0; for (i=0; i<500; i++) k += all_bond_stat[i]; for (i=0; i<500; i++) if (all_bond_stat[i] != 0) { q[2] = conv(i+1, 3); q[1] = conv(i+1, 2); q[0] = conv(i+1, 1); t[0] = i + 1; t[1] = t[0] / (bond_param[0] * 100); t[0] = all_bond_stat[i]; t[0] = t[0] / k; fprintf (fo, "%c.%c%c (%7.4f) - %4i %7.5f\n", q[2], q[1], q[0], t[1], all_bond_stat[i], t[0]); } if (chs == 2) { i = linear + cycle; t[0] = i; t[1] = linear; t[1] = t[1] / t[0]; fprintf (fo, "____________________\n"); fprintf (fo, "Linear molecules - %5i (%8.5f)\n", linear, t[1]); t[1] = cycle; t[1] = t[1] / t[0]; fprintf (fo, "Cycle molecules - %5i (%8.5f)\n", cycle, t[1]); } } } void agl_stat (FILE *fo) { int i, j, h, k, l, molecule; int num_bond[1000], bond[1000][20], bin[1000], label_bond[350], label_num; double leng, min, min00; char q[3]; for (i=0; i(num_mol-1))) k = 0; if (k == 1) { bond[label[i]][num_bond[label[i]]] = label[j]; num_bond[label[i]]++; bond[label[j]][num_bond[label[j]]] = label[i]; num_bond[label[j]]++; bond_array[label[i]][label[j]] = (100*min - fmod(100*min, 1)); bond_array[label[j]][label[i]] = (100*min - fmod(100*min, 1)); } } } break; case 2: for (i=0; i(num_mol-1))) k = 0; if (k == 1) { bond[label[i]][num_bond[label[i]]] = label[j]; num_bond[label[i]]++; bond[label[j]][num_bond[label[j]]] = label[i]; num_bond[label[j]]++; bond_array[label[i]][label[j]] = (100*min00 - fmod(100*min00, 1)); bond_array[label[j]][label[i]] = (100*min00 - fmod(100*min00, 1)); } } else { min = sqrt ((a[label_mol[i][0][1]][0][1]-a[label_mol[j][0][0]][0][0])*(a[label_mol[i][0][1]][0][1]-a[label_mol[j][0][0]][0][0]) + (a[label_mol[i][0][1]][1][1]-a[label_mol[j][0][0]][1][0])*(a[label_mol[i][0][1]][1][1]-a[label_mol[j][0][0]][1][0]) + (a[label_mol[i][0][1]][2][1]-a[label_mol[j][0][0]][2][0])*(a[label_mol[i][0][1]][2][1]-a[label_mol[j][0][0]][2][0])); h = 0; while (label_mol[label[i]][h][1] != 10000) { k = 0; while (label_mol[label[j]][k][0] != 10000) { leng = sqrt ((a[label_mol[i][h][1]][0][1]-a[label_mol[j][k][0]][0][0])*(a[label_mol[i][h][1]][0][1]-a[label_mol[j][k][0]][0][0]) + (a[label_mol[i][h][1]][1][1]-a[label_mol[j][k][0]][1][0])*(a[label_mol[i][h][1]][1][1]-a[label_mol[j][k][0]][1][0]) + (a[label_mol[i][h][1]][2][1]-a[label_mol[j][k][0]][2][0])*(a[label_mol[i][h][1]][2][1]-a[label_mol[j][k][0]][2][0])); if (leng < min) min = leng; k++; } h++; } if (min < bond_param[1]) { k = 1; for (l=0; l(num_mol-1))) k = 0; if (k == 1) { bond[label[i]][num_bond[label[i]]] = label[j]; num_bond[label[i]]++; bond[label[j]][num_bond[label[j]]] = label[i]; num_bond[label[j]]++; bond_array[label[i]][label[j]] = (100*min00 - fmod(100*min00, 1)); bond_array[label[j]][label[i]] = (100*min00 - fmod(100*min00, 1)); } } } } } break; } for (i=0; i 1) fprintf (fo, "-"); for (j=0; j to) { i = from; from = to; to = i; } for (i=0; i<15; i++) fscanf (f_in, "%c", &q); for (i=0; i<3;i++) fscanf(f_in, "%lf", &cell_param[i]); fgets (q, 256, f_in); for (i=0; i<9; i++) fscanf (f_in, "%c", &q); fscanf (f_in, "%i", &choise); fgets (q, 256, f_in); for (i=0; i<12; i++) fscanf (f_in, "%c", &q); fscanf (f_in, "%i", &type_int); fgets (q, 256, f_in); for (i=0; i<11; i++) fscanf (f_in, "%c", &q); for (i=0; i