1 2 #include <util/misc/formio.h> 3 #include <chemistry/qc/psi/psiwfn.h> 4 #include <math/optimize/opt.h> 5 #include <util/keyval/keyval.h> 6 7 #include <chemistry/qc/psi/linkage.h> 8 #include <math/optimize/linkage.h> 9 10 using namespace std; 11 using namespace sc; 12 die()13void die() 14 { 15 fprintf(stderr,"die\n"); 16 abort(); 17 } 18 main(int argc,char ** argv)19main(int argc, char**argv) 20 { 21 22 set_new_handler(die); 23 24 // the output stream is standard out 25 ostream& o = cout; 26 27 ParsedKeyVal* pkv; 28 Ref<KeyVal> rpkv(pkv = new ParsedKeyVal()); 29 pkv->read( SRCDIR "/psi.in"); 30 pkv = 0; // should only use rpkv 31 32 int i, do_grad = 1; 33 34 for (i=0; rpkv->exists("mole",i); i++) { 35 Ref<MolecularEnergy> mole; 36 mole << rpkv->describedclassvalue("mole",i); 37 if (do_grad) 38 mole->do_gradient(1); 39 else 40 mole->do_gradient(0); 41 42 if (mole.nonnull()) { 43 mole->print(o); 44 45 o << "energy = " << mole->energy() << endl; 46 if (do_grad) { 47 o << "gradient:\n"; 48 o << incindent; mole->gradient().print(o); o << decindent; 49 } 50 } 51 else { 52 o << "mole[" << i << "] is null\n"; 53 } 54 } 55 56 for (i=0; rpkv->exists("opt",i); i++) { 57 Ref<Optimize> opt; 58 opt << rpkv->describedclassvalue("opt",i); 59 60 if (opt.nonnull()) { 61 //opt->print(o); 62 63 opt->optimize(); 64 } 65 else { 66 o << "opt[" << i << "] is null\n"; 67 } 68 opt->function()->print(); 69 } 70 } 71