Changeset 4dfef04
- Timestamp:
- Aug 10, 2012, 9:34:32 PM (13 years ago)
- Children:
- 499cea
- Parents:
- d901f7
- File:
-
- 1 edited
-
src/bin/mpqc/mpqc.cc (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/bin/mpqc/mpqc.cc
rd901f7 r4dfef04 1638 1638 } 1639 1639 { 1640 // fill positions and charges 1640 // fill positions and charges (converting from bohr radii to angstroem) 1641 const double AtomicLengthToAngstroem = 0.52917721; 1641 1642 data.positions.reserve(wfn->molecule()->natom()); 1642 1643 data.charges.reserve(wfn->molecule()->natom()); … … 1645 1646 std::vector<double> pos(3, 0.); 1646 1647 for (int j=0;j<3;++j) 1647 pos[j] = wfn->molecule()->r(iatom, j) ;1648 pos[j] = wfn->molecule()->r(iatom, j)*AtomicLengthToAngstroem; 1648 1649 data.positions.push_back(pos); 1649 1650 } … … 1675 1676 1676 1677 // for the moment we always generate a grid of full size 1678 // (converting grid dimensions from angstroem to bohr radii) 1677 1679 const double AtomicLengthToAngstroem = 0.52917721; 1678 1680 SCVector3 min; … … 1685 1687 max.z() = min.z() + data.sampled_grid.size/AtomicLengthToAngstroem; 1686 1688 const int gridpoints = pow(2,data.sampled_grid.level); 1687 delta = data.sampled_grid.size/ (double) gridpoints;1689 delta = (data.sampled_grid.size/AtomicLengthToAngstroem) / (double) gridpoints; 1688 1690 std::cout << "Grid starts at " << min 1689 1691 << " and ends at " << max … … 1696 1698 data.sampled_grid.sampled_grid.clear(); 1697 1699 data.sampled_grid.sampled_grid.reserve(gridpoints*gridpoints*gridpoints); 1698 for (r.x() = min.x() ; r.x() < max.x(); r.x() += delta) { 1700 r = min; 1701 const double element_volume_conversion = 1702 1./AtomicLengthToAngstroem/AtomicLengthToAngstroem/AtomicLengthToAngstroem; 1703 for (size_t x=0; x< gridpoints; ++x) { 1704 r.x() += delta; 1699 1705 std::cout << "Sampling now for x=" << r.x() << std::endl; 1700 for (r.y() = min.y() ; r.y() < max.y(); r.y() += delta) 1701 for (r.z() =min.z() ; r.z() < max.z(); r.z() += delta) { 1702 // only evaluate if we close the basis functions 1706 for (size_t y=0; y< gridpoints; ++y) { 1707 r.y() += delta; 1708 for (size_t z=0; z< gridpoints; ++z) { 1709 r.z() += delta; 1703 1710 if (((r.x() < bmin.x()-boundary) || (r.x() > bmax.x()+boundary)) 1704 1711 || ((r.y() < bmin.y()-boundary) || (r.y() > bmax.y()+boundary)) … … 1706 1713 data.sampled_grid.sampled_grid.push_back(0.); 1707 1714 } else { 1708 const double dens_at_r = scf->density(r) ;1715 const double dens_at_r = scf->density(r) * element_volume_conversion; 1709 1716 // if (fabs(dens_at_r) > 1e-4) 1710 1717 // std::cout << "Electron density at " << r << " is " << dens_at_r << std::endl; … … 1712 1719 } 1713 1720 } 1721 r.z() = min.z(); 1722 } 1723 r.y() = min.y(); 1714 1724 } 1715 assert( data.sampled_grid.size() == gridpoints*gridpoints*gridpoints); 1725 assert( data.sampled_grid.sampled_grid.size() == gridpoints*gridpoints*gridpoints); 1726 // normalization of electron charge to equal electron number 1727 { 1728 double integral_value = 0.; 1729 for (std::vector<double>::const_iterator diter = data.sampled_grid.sampled_grid.begin(); 1730 diter != data.sampled_grid.sampled_grid.end(); ++diter) 1731 integral_value += *diter; 1732 integral_value *= pow(delta*AtomicLengthToAngstroem,3); 1733 const double normalization = scf->nelectron()/integral_value; 1734 std::cout << "Created " << data.sampled_grid.sampled_grid.size() << " grid points " 1735 << " with integral value of " << integral_value 1736 << " against nelectron of " << scf->nelectron() << "." << std::endl; 1737 for (std::vector<double>::iterator diter = data.sampled_grid.sampled_grid.begin(); 1738 diter != data.sampled_grid.sampled_grid.end(); ++diter) 1739 *diter *= normalization; 1740 } 1716 1741 } 1717 1742 scf = 0;
Note:
See TracChangeset
for help on using the changeset viewer.
