Ignore:
Timestamp:
Mar 6, 2016, 9:51:31 PM (10 years ago)
Author:
Frederik Heber <heber@…>
Children:
8b0cdc
Parents:
961fac
git-author:
Frederik Heber <heber@…> (03/02/16 23:51:51)
git-committer:
Frederik Heber <heber@…> (03/06/16 21:51:31)
Message:

Catching when accuracy is not reached and placing values into MPQCData.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/bin/mpqc/mpqc.cc

    r961fac r1e66bf  
    15181518//       ExEnv::out0() << endl;
    15191519//     }
    1520 //     {
    1521 //       SCF *scf = dynamic_cast<SCF*>(wfn.pointer());
    1522 //       if (scf == NULL) {
    1523 //         MBPT2 *mbpt2 = dynamic_cast<MBPT2*>(wfn.pointer());
    1524 //         if (mbpt2 != NULL) {
    1525 //           scf = mbpt2->ref().pointer();
    1526 //         } else
    1527 //           scf = NULL;
    1528 //       }
    1529 //       if (scf != NULL) {
    1530 //         RefSCMatrix oso_vector = scf->oso_eigenvectors();
    1531 //         RefSCMatrix vector = scf->so_to_orthog_so().t() * oso_vector;
    1532 //         {
    1533 //         //  ExEnv::out0() << "The SO eigenvector matrix is ";
    1534 //           std::ofstream output("SOeigenvector.dat");
    1535 //           for (int i=0; i < wfn->ao_dimension(); ++i) {
    1536 //             std::vector<double> sorted_values;
    1537 //             for (int j=0;j<wfn->ao_dimension();++j)
    1538 //               sorted_values.push_back(fabs(oso_vector(i,j)));
    1539 //  //           std::sort(sorted_values.begin(), sorted_values.end());
    1540 //             for (int j=0;j<wfn->ao_dimension();++j) {
    1541 //               output << sorted_values[j] << "\t";
    1542 //             }
    1543 //             output << "\n";
    1544 //           }
    1545 //           output.close();
    1546 //         }
    1547 //         {
    1548 //         //  ExEnv::out0() << "The OSO eigenvector matrix is ";
    1549 //           std::ofstream output("OSOeigenvector.dat");
    1550 //           for (int i=0; i < wfn->ao_dimension(); ++i) {
    1551 //             std::vector<double> sorted_values;
    1552 //             for (int j=0;j<wfn->ao_dimension();++j)
    1553 //               sorted_values.push_back(fabs(vector(i,j)));
    1554 //  //           std::sort(sorted_values.begin(), sorted_values.end());
    1555 //             for (int j=0;j<wfn->ao_dimension();++j) {
    1556 //               output << sorted_values[j] << "\t";
    1557 //             }
    1558 //             output << "\n";
    1559 //           }
    1560 //           output.close();
    1561 //         }
    1562 //       } else {
    1563 //         ExEnv::out0() << "INFO: There is no reference SCF information available either." << endl;
    1564 //       }
    1565 //     }
     1520     // store accuracies
     1521     data.accuracy = mole->value_result().actual_accuracy();
     1522     data.desired_accuracy = mole->value_result().desired_accuracy();
    15661523     // print the energy
    15671524     data.energies.total = wfn->energy();
     
    18341791         std::set<int> valence_indices;
    18351792         if (data.DoValenceOnly == MPQCData::DoSampleValenceOnly) {
    1836            // calculate number of core electrons, half their number is the
    1837            // number of orbitals to skip
    1838            size_t sum = 0;
    1839            for (int iatom=0;iatom < wfn->molecule()->natom(); ++iatom) {
    1840              double charge = wfn->molecule()->Z(iatom);
    1841              sum += getCoreElectrons(charge);
    1842            }
    1843            sum = sum/2 - 1;
    18441793           // find valence orbitals
    18451794           RefDiagSCMatrix evals = scf->eigenvalues();
     
    18511800             evals_sorted.insert(evals(i));
    18521801           std::set<double> evals_distances;
    1853            std::set<double>::const_iterator iter = evals_sorted.begin();
    1854            std::advance(iter, sum);
    1855 //           std::set<double>::const_iterator iter = advancer++;
    1856 //           for(;advancer != evals_sorted.end(); ++advancer,++iter) {
    1857 //             if ((*advancer) > 0.)
    1858 //               break;
    1859 //             evals_distances.insert(-(*iter)+(*advancer));
    1860 //           }
    1861 //           const double largest_distance = (evals_distances.empty() ? 0. : *(evals_distances.rbegin()));
    1862 //           ExEnv::out0()  << "Largest distance between EV is " << largest_distance << std::endl;
    1863 //           advancer = evals_sorted.begin();
    1864 //           iter = advancer++;
    1865 //           for(;advancer != evals_sorted.begin(); ++advancer,++iter) {
    1866 //             if ((*advancer) > 0.)
    1867 //               break;
    1868 //             if (fabs((-(*iter)+(*advancer)) - largest_distance) < 1e-10)
    1869 //               break;
    1870 //           }
    1871 //           assert( advancer != evals_sorted.begin() );
     1802           std::set<double>::const_iterator advancer = evals_sorted.begin();
     1803           std::set<double>::const_iterator iter = advancer++;
     1804           for(;advancer != evals_sorted.end(); ++advancer,++iter)
     1805             evals_distances.insert((*advancer)-(*iter));
     1806           const double largest_distance = *(evals_distances.rbegin());
     1807           ExEnv::out0()  << "Largest distance between EV is " << largest_distance << std::endl;
     1808           advancer = evals_sorted.begin();
     1809           iter = advancer++;
     1810           for(;advancer != evals_sorted.begin(); ++advancer,++iter)
     1811             if (fabs(fabs((*advancer)-(*iter)) - largest_distance) < 1e-10)
     1812               break;
     1813           assert( advancer != evals_sorted.begin() );
    18721814           const double last_core_ev = (*iter);
    1873            ExEnv::out0()  << "Last (" << sum << ") core EV is " << last_core_ev << std::endl;
     1815           ExEnv::out0()  << "Last core EV is " << last_core_ev << std::endl;
    18741816           for(int i=0;i<wfn->oso_dimension(); ++i)
    18751817             if (evals(i) > last_core_ev)
     
    19571899             n_electrons -= wfn->molecule()->n_core_electrons();
    19581900           const double normalization =
    1959                ((integral_value == 0) || (n_electrons == 0)) ?
     1901               ((integral_value == 0) && (n_electrons == 0)) ?
    19601902                   1. : n_electrons/integral_value;
    19611903           std::cout << "Created " << data.sampled_grid.sampled_grid.size() << " grid points"
     
    21032045  data.DoValenceOnly = DoValenceOnly; // set whether we sample just valence electron and nuclei densities
    21042046// now call work horse
    2105   mainFunction(grp, values, output, input, generic_input, in_char_array, argc, argv, data);
     2047  try {
     2048    mainFunction(grp, values, output, input, generic_input, in_char_array, argc, argv, data);
     2049  }
     2050  catch (SCException &e) {
     2051    cout << argv[0] << ": ERROR: SC EXCEPTION RAISED:" << endl
     2052         << e.what()
     2053         << endl;
     2054    clean_up();
     2055  }
    21062056
    21072057  //delete[] in_char_array; // is deleted in mainFunction()
     
    21182068
    21192069  FragmentResult::ptr s( new FragmentResult(getId(), returnstream.str()) );
     2070  if (s->exitflag != 0)
     2071    cerr << "Job #" << s->getId() << " failed to reach desired accuracy." << endl;
     2072
    21202073  return s;
    21212074}
Note: See TracChangeset for help on using the changeset viewer.