1
/*** ZMAT_TO_INTCO() determine simples from z-matrix coordinates
2
- not intended to work for dummy atoms ***/
8
#include <libciomr/libciomr.h>
9
#include <libchkpt/chkpt.h>
19
void zmat_to_intco() {
20
int i, first, a, b, c, d, cnt = 0, natom;
25
natom = optinfo.natom;
26
chkpt_init(PSIO_OPEN_OLD);
27
zmat = chkpt_rd_zmat();
31
for (i=0;i<natom;++i) {
32
fprintf(outfile,"%d %d %d %d\n", i, zmat[i].bond_atom, zmat[i].angle_atom, zmat[i].tors_atom);
33
fprintf(outfile,"%20.10lf %20.10lf %20.10lf\n", zmat[i].bond_val, zmat[i].angle_val, zmat[i].tors_val);
34
fprintf(outfile,"%s %s %s \n", zmat[i].bond_label, zmat[i].angle_label, zmat[i].tors_label);
38
ffile(&fp_intco,"intco.dat",0);
39
fprintf(fp_intco,"intco: (\n");
41
fprintf(fp_intco," stre = (\n");
42
for (i=1; i<natom; ++i) {
44
b = zmat[i].bond_atom;
46
fprintf(fp_intco, " (%d %d %d)\n",++cnt, a, b);
48
fprintf(fp_intco," )\n");
50
fprintf(fp_intco," bend = (\n");
51
for (i=2; i<natom; ++i) {
53
b = zmat[i].bond_atom;
54
c = zmat[i].angle_atom;
56
if (zmat[i].angle_val != 180.0) {
57
fprintf(fp_intco, " (%d %d %d %d)\n",++cnt, a, b, c);
60
fprintf(fp_intco," )\n");
62
fprintf(fp_intco," tors = (\n");
63
for (i=3; i<natom; ++i) {
65
b = zmat[i].bond_atom;
66
c = zmat[i].angle_atom;
67
d = zmat[i].tors_atom;
68
swap_tors(&a, &b, &c, &d);
69
if (zmat[i].angle_val != 180.0)
70
fprintf(fp_intco, " (%d %d %d %d %d)\n",++cnt, a, b, c, d);
72
fprintf(fp_intco," )\n");
75
for (i=2; i<natom; ++i) {
77
b = zmat[i].bond_atom;
78
c = zmat[i].angle_atom;
80
if (zmat[i].angle_val == 180.0) {
82
fprintf(fp_intco," lin1 = (\n");
85
fprintf(fp_intco, " (%d %d %d %d)\n",++cnt, a, b, c);
88
if (!first) fprintf(fp_intco," )\n");
91
for (i=2; i<natom; ++i) {
93
b = zmat[i].bond_atom;
94
c = zmat[i].angle_atom;
96
if (zmat[i].angle_val == 180.0) {
98
fprintf(fp_intco," lin2 = (\n");
101
fprintf(fp_intco, " (%d %d %d %d)\n",++cnt, a, b, c);
104
if (!first) fprintf(fp_intco," )\n");
105
fprintf(fp_intco,")");
108
ffile(&fp_intco,"fintco.dat",0);
110
/* write out coordinates to be frozen */
111
fprintf(fp_intco,"fixed_intco: (\n");
114
fprintf(fp_intco," stre = (\n");
115
for (i=1; i<natom; ++i) {
117
b = zmat[i].bond_atom;
119
if (zmat[i].bond_opt == 0)
120
fprintf(fp_intco, " ( %d %d)\n", a, b);
122
fprintf(fp_intco," )\n");
124
fprintf(fp_intco," bend = (\n");
125
for (i=2; i<natom; ++i) {
127
b = zmat[i].bond_atom;
128
c = zmat[i].angle_atom;
130
if (zmat[i].angle_val != 180.0) {
131
if (zmat[i].angle_opt == 0)
132
fprintf(fp_intco, " ( %d %d %d)\n", a, b, c);
135
fprintf(fp_intco," )\n");
137
fprintf(fp_intco," tors = (\n");
138
for (i=3; i<natom; ++i) {
140
b = zmat[i].bond_atom;
141
c = zmat[i].angle_atom;
142
d = zmat[i].tors_atom;
143
swap_tors(&a, &b, &c, &d);
144
if (zmat[i].angle_val != 180.0) {
145
if (zmat[i].tors_opt == 0)
146
fprintf(fp_intco, " ( %d %d %d %d)\n", a, b, c, d);
149
fprintf(fp_intco," )\n");
152
for (i=2; i<natom; ++i) {
154
b = zmat[i].bond_atom;
155
c = zmat[i].angle_atom;
157
if (zmat[i].angle_val == 180.0) {
158
if (zmat[i].angle_opt == 0) {
160
fprintf(fp_intco," lin1 = (\n");
163
fprintf(fp_intco, " ( %d %d %d)\n", a, b, c);
167
if (!first) fprintf(fp_intco," )\n");
170
for (i=2; i<natom; ++i) {
172
b = zmat[i].bond_atom;
173
c = zmat[i].angle_atom;
175
if (zmat[i].angle_val == 180.0) {
176
if (zmat[i].angle_opt == 0) {
178
fprintf(fp_intco," lin2 = (\n");
181
fprintf(fp_intco, " ( %d %d %d)\n", a, b, c);
185
if (!first) fprintf(fp_intco," )\n");
188
optinfo.constraints_present = 1;
190
fprintf(fp_intco,")");