diff --git a/Doxyfile b/Doxyfile index c8aa9e562..9c1022217 100644 --- a/Doxyfile +++ b/Doxyfile @@ -811,7 +811,7 @@ EXCLUDE_SYMBOLS = # that contain example code fragments that are included (see the \include # command). -EXAMPLE_PATH = +EXAMPLE_PATH = src # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and @@ -892,7 +892,7 @@ USE_MDFILE_AS_MAINPAGE = # also VERBATIM_HEADERS is set to NO. # The default value is: NO. -SOURCE_BROWSER = NO +SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. @@ -911,13 +911,13 @@ STRIP_CODE_COMMENTS = YES # function all documented functions referencing it will be listed. # The default value is: NO. -REFERENCED_BY_RELATION = NO +REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. -REFERENCES_RELATION = NO +REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES, then the hyperlinks from functions in REFERENCES_RELATION and diff --git a/src/Drivers/miniqmc.cpp b/src/Drivers/miniqmc.cpp index 9fb4d6e1d..61fdb9ad2 100644 --- a/src/Drivers/miniqmc.cpp +++ b/src/Drivers/miniqmc.cpp @@ -22,13 +22,22 @@ @mainpage MiniQMC: miniapp for QMCPACK kernels Implemented kernels - - \subpage JastrowFactors includes one-body, two-body and three-body Jastrow + - \subpage JastrowFactors "Jastrow Factors" includes one-body, two-body and three-body Jastrow factors. - - Single Particle Orbitals (SPO) based on splines - - Inverse determinant update + - \subpage SPO "Single Particle Orbitals" (SPO) based on splines + - \subpage InverseUpdate "Inverse matrix update" for determinant + - \subpage ParticleHandling "Particle distances" and boundary conditions + + + + The \ref src/Drivers/miniqmc.cpp "miniqmc" driver models particle moves and evaluation of the wavefunction. + The wiki gives an outline of the computation. + + The \ref src/Drivers/check_wfc.cpp "check_wfc", \ref src/Drivers/check_spo.cpp "check_spo", + and \ref src/Drivers/check_determinant.cpp "check_determinant" drivers check correctness by comparing against + reference implementations of the Jastrow, SPO, and determinant inverse (respectively). + The code for the reference implementation uses a `Ref` suffix and is contained in the \ref miniqmcreference namespace. - Compares against a reference implementation for correctness. - (separate drivers) */ @@ -42,8 +51,8 @@ The Jastrow factor is composed from two types of classes - the first is for the types of particles involved (one/two/three body), and the second is the functional form for the radial part. The classes for the first part are - qmcplusplus::OneBodyJastrowRef, qmcplusplus::TwoBodyJastrowRef and - qmcplusplus::ThreeBodyJastrowRef. The second part uses 1D B-splines, defined + qmcplusplus::OneBodyJastrow, qmcplusplus::TwoBodyJastrow and + qmcplusplus::ThreeBodyJastrow. The second part uses 1D B-splines, defined in qmcplusplus::BsplineFunctor, for one and two body Jastrow and polynomials, defined in qmcplusplus::PolynomialFunctor3D, for three body Jastrow. @@ -51,6 +60,46 @@ it is the most widely used. The QMCPACK distribution contains other functional forms. */ + + /*! + \page SPO Single Particle Orbitals + + The Single Particle Orbitals (SPO) depend only on individual electron coordinates and are represented by a 3D spline. + The 3D spline code is located in \ref src/Numerics/Spline2, with the evaluation code in the \ref qmcplusplus::MultiBspline "MultiBspline" class. + The connection from the wavefunction to the spline functions is located in the \ref qmcplusplus::einspline_spo "einspline_spo" class. + + The core evaluation routine evaluates the value, the gradient, and the Laplacian at a given electron coordinate. + + The size of the coefficient data set can be large - on the order of gigabytes. + + */ + + /*! + \page InverseUpdate Inverse Matrix Update + + The inverse matrix and updating is handled by \ref qmcplusplus::DiracDeterminant "DiracDeterminant". + The initial creation and inversion of the matrix occurs in qmcplusplus::DiracDeterminant::recompute, which is called on the first + call to qmcplusplus::DiracDeterminant::evaluateLog. The rows are updated after accepted Monte Carlo moves + via updateRow (in \ref src/QMCWaveFunctions/Determinant.h), which is called from qmcplusplus::DiracDeterminant::acceptMove. + + The implementation for updateRow is + \snippet QMCWaveFunctions/Determinant.h UpdateRow + */ + + /*! + \page ParticleHandling Particle positions, distances, and boundary conditions + + The qmcpluplus:ParticleSet class holds particle positions, lattice information, and distance tables. + The positions are stored in the \ref qmcplusplus::ParticleSet#R member, and a copy is kept in a Structure-of-Arrays (SoA) layout in + \ref qmcplusplus::ParticleSet#RSoA. + + Distances, using the minimum image conventions with periodic boundaries, are computed in \ref src/Particle/Lattice/ParticleBConds.h. + + Distances are stored in distance tables, where qmcplusplus::DistanceTableData is the base class for the storage. There are two types + of distance tables. One is for similar particles (qmcplusplus::DistanceTableAA), such as electron-electron distances. The other + is for dissimilar particles (qmcplusplus::DistanceTableBA), such as electron-ion distances. + */ + // clang-format on #include diff --git a/src/Particle/ParticleSet.h b/src/Particle/ParticleSet.h index ec2eba88a..dfae98aa5 100644 --- a/src/Particle/ParticleSet.h +++ b/src/Particle/ParticleSet.h @@ -85,15 +85,15 @@ class ParticleSet : public QMCTraits, public PtclOnLatticeTraits /// the name of the particle set. std::string myName; - //!< ParticleLayout + /// ParticleLayout ParticleLayout_t Lattice, PrimitiveLattice; - //!< unique, persistent ID for each particle + /// unique, persistent ID for each particle ParticleIndex_t ID; /// index to the primitice cell with tiling ParticleIndex_t PCID; - //!< Species ID + /// Species ID ParticleIndex_t GroupID; - //!< Position + /// Position ParticlePos_t R; /// SoA copy of R VectorSoAContainer RSoA; diff --git a/src/QMCWaveFunctions/Determinant.h b/src/QMCWaveFunctions/Determinant.h index 8c64425ba..9f8b547a4 100644 --- a/src/QMCWaveFunctions/Determinant.h +++ b/src/QMCWaveFunctions/Determinant.h @@ -122,6 +122,7 @@ inline void InvertOnly(T *restrict x, int n, int lda, T *restrict work, } /** update Row as implemented in the full code */ +/** [UpdateRow] */ template inline void updateRow(T *restrict pinv, const T *restrict tv, int m, int lda, int rowchanged, RT c_ratio_in) @@ -135,6 +136,7 @@ inline void updateRow(T *restrict pinv, const T *restrict tv, int m, int lda, std::copy_n(pinv + m * rowchanged, m, rcopy); BLAS::ger(m, m, -cone, rcopy, 1, temp, 1, pinv, m); } +/** [UpdateRow] */ /**@}*/ // FIXME do we want to keep this in the miniapp?