Changeset 7d8854


Ignore:
Timestamp:
Mar 11, 2013, 11:33:01 PM (13 years ago)
Author:
Frederik Heber <heber@…>
Children:
e00146
Parents:
8b3553
git-author:
Frederik Heber <heber@…> (03/06/13 13:03:26)
git-committer:
Frederik Heber <heber@…> (03/11/13 23:33:01)
Message:

Optimized usage of "scf->density()".

  • allocation can be done before and after loop over sampling points, hence we took the function and placed its contents directly where the call was before.
File:
1 edited

Legend:

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

    r8b3553 r7d8854  
    16991699           << " and ends at " << max
    17001700           << " with a delta of " << delta
    1701            << " to get " << samplepoints[0] << "," << samplepoints[1] << "," << samplepoints[2] << "," << " samplepoints."
     1701           << " to get "
     1702           << samplepoints[0] << ","
     1703           << samplepoints[1] << ","
     1704           << samplepoints[2] << " samplepoints."
    17021705           << std::endl;
    17031706       assert( data.sampled_grid.sampled_grid.size() == samplepoints[0]*samplepoints[1]*samplepoints[2]);
     
    17071710           1./AtomicLengthToAngstroem/AtomicLengthToAngstroem/AtomicLengthToAngstroem;
    17081711       SCVector3 r = min;
     1712
     1713       // taken from scf::density()
     1714       RefSCMatrix nos
     1715           = scf->integral()->petite_list()->evecs_to_AO_basis(scf->natural_orbitals());
     1716       RefDiagSCMatrix nd = scf->natural_density();
     1717       GaussianBasisSet::ValueData *valdat
     1718         = new GaussianBasisSet::ValueData(scf->basis(), scf->integral());
    17091719       std::vector<double>::iterator griditer = data.sampled_grid.sampled_grid.begin();
     1720       const int nbasis = scf->basis()->nbasis();
     1721       double *bs_values = new double[nbasis];
     1722
    17101723       for (size_t x = 0; x < samplepoints[0]; ++x, r.x() += delta(0)) {
    17111724         std::cout << "Sampling now for x=" << r.x() << std::endl;
    17121725         for (size_t y = 0; y < samplepoints[1]; ++y, r.y() += delta(1)) {
    17131726           for (size_t z = 0; z < samplepoints[2]; ++z, r.z() += delta(2)) {
    1714              const double dens_at_r = scf->density(r) * element_volume_conversion;
     1727             scf->basis()->values(r,valdat,bs_values);
     1728
     1729             // loop over natural orbitals adding contributions to elec_density
     1730             double elec_density=0.0;
     1731             for (int i=0; i<nbasis; ++i) {
     1732                 double tmp = 0.0;
     1733                 for (int j=0; j<nbasis; ++j) {
     1734                     tmp += nos.get_element(j,i)*bs_values[j];
     1735                   }
     1736                 elec_density += nd.get_element(i)*tmp*tmp;
     1737               }
     1738             const double dens_at_r = elec_density * element_volume_conversion;
     1739//             const double dens_at_r = scf->density(r) * element_volume_conversion;
     1740
    17151741//             if (fabs(dens_at_r) > 1e-4)
    17161742//               std::cout << "Electron density at " << r << " is " << dens_at_r << std::endl;
     
    17241750         r.y() = min.y();
    17251751       }
     1752       delete[] bs_values;
     1753       delete valdat;
    17261754       assert( griditer == data.sampled_grid.sampled_grid.end());
    17271755       // normalization of electron charge to equal electron number
     
    18561884  do {
    18571885    char filename_template[] = "mpqc_temp_XXXXXX";
    1858     char filename_suffix[] = ".in\0";
     1886    char filename_suffix[] = ".in";
    18591887    char *tempfilename = (char *) malloc ( (strlen(filename_template)+strlen(filename_suffix))*(sizeof(char)));
    18601888    strncpy(tempfilename, mktemp(filename_template), strlen(filename_template));
    1861     tempfilename[strlen(filename_template)] = '\0';
    18621889    strncat(tempfilename, filename_suffix, strlen(filename_suffix)); 
    18631890    output = tempfilename;
Note: See TracChangeset for help on using the changeset viewer.