1
/* READ_CONSTRAINTS reads constraints from "FIXED_INTCO" section of input
3
\brief READ_CONSTRAINTS reads constraints from "FIXED_INTCO" section of input
2
4
or intco files, the constrained internals must already be present in the
3
5
list of all of the simple internal coordinates
14
10
#include <libchkpt/chkpt.h>
17
13
#include <libciomr/libciomr.h>
18
14
#include <libipv1/ip_lib.h>
19
15
#include <physconst.h>
26
21
#include "internals.h"
24
namespace psi { namespace optking {
29
26
int *read_constraints(internals &simples) {
30
int num_type, i,j,a,b,c,d,cnt,*sign,id;
27
int num_type, i,j,a,b,c,d,cnt,*sign,id, intco_type, sub_index, sub_index2;
31
28
int iconstraints, *constraints;
33
30
optinfo.constraints_present = 0;
34
31
optinfo.nconstraints = 0;
37
fprintf(outfile,"Searching for geometrical constraints...");
34
fprintf(outfile,"\nSearching for geometrical constraints...");
39
if (ip_exist(":FIXED_INTCO",0)) {
36
if ((ip_exist(":FIXED_INTCO",0)) || (optinfo.fix_interfragment) || (optinfo.fix_intrafragment)) {
40
37
ip_cwk_clear(); /* search only fixed_intco */
41
38
ip_cwk_add(":FIXED_INTCO");
199
if (optinfo.fix_interfragment) { /* freeze all interfragment coordinates */
200
for (i=0; i<simples.frag.get_num(); ++i) {
201
id = simples.frag.get_id(i);
203
constraints[iconstraints++] = simples.id_to_index(id);
204
if (iconstraints == 1) fprintf(outfile,"Coordinates to be constrained:\n");
205
fprintf(outfile,"Fragment coordinate %d\n", id);
208
optinfo.nconstraints++;
212
else if (ip_exist("FRAG",0)) { /* freeze user-specified interfragment coordinates */
214
ip_count("FRAG",&num_type,0);
215
for(i=0; i<num_type; ++i) {
216
ip_data("FRAG","%d",&(id),2,i,0);
218
constraints[iconstraints++] = simples.id_to_index(id);
219
if (iconstraints == 1) fprintf(outfile,"Coordinates to be constrained:\n");
220
fprintf(outfile,"Fragment coordinate %d\n", id);
223
optinfo.nconstraints++;
228
if (optinfo.fix_intrafragment) { /* fix everything EXCEPT interfragment coordinates */
229
for (i=0; i<simples.get_num(); ++i) {
230
id = simples.index_to_id(i);
231
simples.locate_id(id, &intco_type, &sub_index, &sub_index2);
232
if (intco_type != FRAG_TYPE) {
234
constraints[iconstraints++] = simples.id_to_index(id);
235
if (iconstraints == 1) fprintf(outfile,"Coordinates to be constrained:\n");
236
if (iconstraints == 1) fprintf(outfile,"Simple coordinates:\n");
237
fprintf(outfile," %d", id);
240
optinfo.nconstraints++;
201
246
if (cnt) fprintf(outfile,"%d found.\n",optinfo.nconstraints);
202
247
} /* end cnt loop */