dftd3 1.3.0__tar.gz → 1.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. {dftd3-1.3.0 → dftd3-1.3.2}/PKG-INFO +3 -2
  2. {dftd3-1.3.0 → dftd3-1.3.2}/README.rst +1 -1
  3. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/__init__.py +1 -1
  4. {dftd3-1.3.0 → dftd3-1.3.2}/meson.build +1 -1
  5. {dftd3-1.3.0 → dftd3-1.3.2}/pyproject.toml +2 -1
  6. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/.github/workflows/build.yml +1 -1
  7. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/.github/workflows/wheel.yml +41 -7
  8. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/CMakeLists.txt +1 -1
  9. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/comparison.rst +4 -0
  10. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/fpm.toml +3 -3
  11. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/meson.build +1 -1
  12. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/README.rst +1 -1
  13. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/__init__.py +1 -1
  14. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/meson.build +1 -1
  15. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/pyproject.toml +2 -1
  16. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/api.f90 +1 -1
  17. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/damping/atm.f90 +3 -3
  18. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/disp.f90 +1 -0
  19. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/version.f90 +2 -2
  20. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/subprojects/mctc-lib.wrap +1 -1
  21. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/subprojects/toml-f.wrap +1 -1
  22. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/unit/test_periodic.f90 +192 -30
  23. {dftd3-1.3.0 → dftd3-1.3.2}/.gitignore +0 -0
  24. {dftd3-1.3.0 → dftd3-1.3.2}/COPYING +0 -0
  25. {dftd3-1.3.0 → dftd3-1.3.2}/COPYING.LESSER +0 -0
  26. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/ase.py +0 -0
  27. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/interface.py +0 -0
  28. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/library.py +0 -0
  29. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/meson.build +0 -0
  30. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/parameters.py +0 -0
  31. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/parameters.toml +0 -0
  32. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/py.typed +0 -0
  33. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/pyscf.py +0 -0
  34. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/qcschema.py +0 -0
  35. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/test_ase.py +0 -0
  36. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/test_interface.py +0 -0
  37. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/test_library.py +0 -0
  38. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/test_parameters.py +0 -0
  39. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/test_pyscf.py +0 -0
  40. {dftd3-1.3.0 → dftd3-1.3.2}/dftd3/test_qcschema.py +0 -0
  41. {dftd3-1.3.0 → dftd3-1.3.2}/ffibuilder.py +0 -0
  42. {dftd3-1.3.0 → dftd3-1.3.2}/include/_dftd3.h +0 -0
  43. {dftd3-1.3.0 → dftd3-1.3.2}/meson_options.txt +0 -0
  44. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/.codecov.yml +0 -0
  45. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/.github/dco.yml +0 -0
  46. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/.github/workflows/codeql.yml +0 -0
  47. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/.github/workflows/docs.yml +0 -0
  48. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/.gitignore +0 -0
  49. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/.readthedocs.yaml +0 -0
  50. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/CONTRIBUTING.md +0 -0
  51. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/COPYING +0 -0
  52. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/COPYING.LESSER +0 -0
  53. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/README.md +0 -0
  54. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/app/CMakeLists.txt +0 -0
  55. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/app/argument.f90 +0 -0
  56. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/app/cli.f90 +0 -0
  57. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/app/driver.f90 +0 -0
  58. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/app/example.xyz +0 -0
  59. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/app/help.f90 +0 -0
  60. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/app/main.f90 +0 -0
  61. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/app/meson.build +0 -0
  62. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/app/toml.f90 +0 -0
  63. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/assets/ci/build-env.yaml +0 -0
  64. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/assets/ci/python-env.yaml +0 -0
  65. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/assets/ci/setup-intel.sh +0 -0
  66. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/assets/ci/wheel-req.txt +0 -0
  67. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/assets/parameters.toml +0 -0
  68. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/config/CMakeLists.txt +0 -0
  69. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/config/cmake/Findmctc-lib.cmake +0 -0
  70. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/config/cmake/Findmstore.cmake +0 -0
  71. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/config/cmake/Findtoml-f.cmake +0 -0
  72. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/config/cmake/s-dftd3-utils.cmake +0 -0
  73. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/config/install-mod.py +0 -0
  74. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/config/meson.build +0 -0
  75. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/config/template.cmake +0 -0
  76. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/config/template.pc +0 -0
  77. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/_static/references.bib +0 -0
  78. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/api/ase.rst +0 -0
  79. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/api/c.rst +0 -0
  80. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/api/fortran.rst +0 -0
  81. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/api/index.rst +0 -0
  82. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/api/pyscf.rst +0 -0
  83. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/api/python.rst +0 -0
  84. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/api/qcschema.rst +0 -0
  85. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/conf.py +0 -0
  86. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/guide/citing.rst +0 -0
  87. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/guide/index.rst +0 -0
  88. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/guide/minimal-example/energy.c +0 -0
  89. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/guide/minimal-example/energy.f90 +0 -0
  90. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/guide/minimal-example/energy.py +0 -0
  91. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/guide/minimal-example.rst +0 -0
  92. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/index.rst +0 -0
  93. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/installation.rst +0 -0
  94. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/requirements.txt +0 -0
  95. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/tutorial/first-steps-cli.rst +0 -0
  96. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/tutorial/first-steps-fortran/app/main.f90 +0 -0
  97. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/tutorial/first-steps-fortran/fpm.toml +0 -0
  98. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/tutorial/first-steps-fortran/src/scan.f90 +0 -0
  99. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/tutorial/first-steps-fortran.rst +0 -0
  100. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/doc/tutorial/index.rst +0 -0
  101. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/docs.md +0 -0
  102. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/include/dftd3.h +0 -0
  103. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/include/s-dftd3.h +0 -0
  104. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/man/s-dftd3.1.adoc +0 -0
  105. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/meson_options.txt +0 -0
  106. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/.gitignore +0 -0
  107. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/COPYING +0 -0
  108. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/COPYING.LESSER +0 -0
  109. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/ase.py +0 -0
  110. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/interface.py +0 -0
  111. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/library.py +0 -0
  112. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/meson.build +0 -0
  113. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/parameters.py +0 -0
  114. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/py.typed +0 -0
  115. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/pyscf.py +0 -0
  116. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/qcschema.py +0 -0
  117. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/test_ase.py +0 -0
  118. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/test_interface.py +0 -0
  119. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/test_library.py +0 -0
  120. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/test_parameters.py +0 -0
  121. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/test_pyscf.py +0 -0
  122. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/dftd3/test_qcschema.py +0 -0
  123. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/ffibuilder.py +0 -0
  124. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/include/_dftd3.h +0 -0
  125. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/python/meson_options.txt +0 -0
  126. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/CMakeLists.txt +0 -0
  127. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/CMakeLists.txt +0 -0
  128. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/citation.f90 +0 -0
  129. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/cutoff.f90 +0 -0
  130. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/damping/CMakeLists.txt +0 -0
  131. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/damping/cso.f90 +0 -0
  132. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/damping/meson.build +0 -0
  133. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/damping/mzero.f90 +0 -0
  134. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/damping/optimizedpower.f90 +0 -0
  135. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/damping/rational.f90 +0 -0
  136. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/damping/zero.f90 +0 -0
  137. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/damping.f90 +0 -0
  138. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/data/CMakeLists.txt +0 -0
  139. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/data/meson.build +0 -0
  140. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/data/r4r2.f90 +0 -0
  141. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/data/vdwrad.f90 +0 -0
  142. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/data.f90 +0 -0
  143. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/gcp/CMakeLists.txt +0 -0
  144. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/gcp/meson.build +0 -0
  145. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/gcp/param.f90 +0 -0
  146. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/gcp.f90 +0 -0
  147. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/meson.build +0 -0
  148. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/model.f90 +0 -0
  149. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/ncoord.f90 +0 -0
  150. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/output.f90 +0 -0
  151. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/param.f90 +0 -0
  152. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/reference.f90 +0 -0
  153. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3/utils.f90 +0 -0
  154. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/dftd3.f90 +0 -0
  155. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/src/meson.build +0 -0
  156. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/subprojects/.gitignore +0 -0
  157. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/subprojects/mstore.wrap +0 -0
  158. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/CMakeLists.txt +0 -0
  159. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/api/api-test.c +0 -0
  160. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/api/meson.build +0 -0
  161. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/meson.build +0 -0
  162. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/unit/CMakeLists.txt +0 -0
  163. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/unit/main.f90 +0 -0
  164. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/unit/meson.build +0 -0
  165. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/unit/test_dftd3.f90 +0 -0
  166. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/unit/test_gcp.f90 +0 -0
  167. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/unit/test_model.f90 +0 -0
  168. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/unit/test_pairwise.f90 +0 -0
  169. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/unit/test_param.f90 +0 -0
  170. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/unit/test_regression.f90 +0 -0
  171. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/01-energy-d3-bj.json +0 -0
  172. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/01-energy-d3-bj.resp +0 -0
  173. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/01-tyr-xab.xyz +0 -0
  174. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/02-energy-d3-zero.json +0 -0
  175. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/02-energy-d3-zero.resp +0 -0
  176. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/02-ser-xad.gen +0 -0
  177. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/03-energy-d3-bjm.json +0 -0
  178. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/03-energy-d3-bjm.resp +0 -0
  179. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/03-met-xag.coord +0 -0
  180. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/04-energy-d3-zerom.json +0 -0
  181. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/04-energy-d3-zerom.resp +0 -0
  182. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/04-val-xad.mol +0 -0
  183. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/05-cys-xag.sdf +0 -0
  184. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/05-energy-d3-op.json +0 -0
  185. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/05-energy-d3-op.resp +0 -0
  186. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/06-229.xyz +0 -0
  187. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/06-gradient-d3-bj.json +0 -0
  188. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/06-gradient-d3-bj.resp +0 -0
  189. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/07-bih3-nh3.tmol +0 -0
  190. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/07-gradient-d3-zero.json +0 -0
  191. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/07-gradient-d3-zero.resp +0 -0
  192. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/08-gradient-d3-bjm.json +0 -0
  193. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/08-gradient-d3-bjm.resp +0 -0
  194. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/08-teh2-hbr.mol +0 -0
  195. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/09-0a.pdb +0 -0
  196. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/09-gradient-d3-zerom.json +0 -0
  197. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/09-gradient-d3-zerom.resp +0 -0
  198. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/10-but14diol.log +0 -0
  199. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/10-gradient-d3-op.json +0 -0
  200. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/10-gradient-d3-op.resp +0 -0
  201. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/11-cf3br-benzene.xyz +0 -0
  202. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/11-pairwise-d3-bj.json +0 -0
  203. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/11-pairwise-d3-bj.resp +0 -0
  204. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/12-butane.gen +0 -0
  205. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/12-pairwise-d3-zero.json +0 -0
  206. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/12-pairwise-d3-zero.resp +0 -0
  207. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/13-c60.coord +0 -0
  208. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/13-pairwise-d3-bjm.json +0 -0
  209. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/13-pairwise-d3-bjm.resp +0 -0
  210. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/14-anthracene2.xyz +0 -0
  211. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/14-pairwise-d3-zerom.json +0 -0
  212. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/14-pairwise-d3-zerom.resp +0 -0
  213. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/15-pairwise-d3-op.json +0 -0
  214. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/15-pairwise-d3-op.resp +0 -0
  215. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/15-pxylene.mol +0 -0
  216. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/16-db-d3-bj.json +0 -0
  217. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/16-db-d3-bj.resp +0 -0
  218. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/16-i10e.gen +0 -0
  219. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/17-db-d3-zero.json +0 -0
  220. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/17-db-d3-zero.resp +0 -0
  221. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/17-li2-ch4.sdf +0 -0
  222. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/18-c1.pdb +0 -0
  223. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/18-db-d3-bjm.json +0 -0
  224. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/18-db-d3-bjm.resp +0 -0
  225. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/19-db-d3-zerom.json +0 -0
  226. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/19-db-d3-zerom.resp +0 -0
  227. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/19-g1.mol +0 -0
  228. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/20-db-d3-op.json +0 -0
  229. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/20-db-d3-op.resp +0 -0
  230. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/20-i21p.tmol +0 -0
  231. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/21-ad3.coord +0 -0
  232. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/21-gcp-pbeh3c.json +0 -0
  233. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/21-gcp-pbeh3c.resp +0 -0
  234. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/22-benI-acetone.xyz +0 -0
  235. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/22-gcp-b973c.json +0 -0
  236. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/22-gcp-b973c.resp +0 -0
  237. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/23-444.sdf +0 -0
  238. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/23-gcp-hf3c.json +0 -0
  239. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/23-gcp-hf3c.resp +0 -0
  240. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/24-gcp-hf-deftzvp.json +0 -0
  241. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/24-gcp-hf-deftzvp.resp +0 -0
  242. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/24-h2o_6.qchem +0 -0
  243. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/25-g3.gen +0 -0
  244. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/25-gcp-b3lyp-631gd.json +0 -0
  245. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/25-gcp-b3lyp-631gd.resp +0 -0
  246. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/meson.build +0 -0
  247. {dftd3-1.3.0 → dftd3-1.3.2}/subprojects/s-dftd3/test/validation/tester.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dftd3
3
- Version: 1.3.0
3
+ Version: 1.3.2
4
4
  Summary: Python API of the DFT-D3 project
5
5
  License: LGPL-3.0-or-later
6
6
  Classifier: Intended Audience :: Science/Research
@@ -12,6 +12,7 @@ Classifier: Programming Language :: Python :: 3.10
12
12
  Classifier: Programming Language :: Python :: 3.11
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
15
16
  Classifier: Topic :: Scientific/Engineering :: Chemistry
16
17
  Classifier: Topic :: Scientific/Engineering :: Physics
17
18
  Project-URL: repository, https://github.com/dftd3/simple-dftd3
@@ -254,7 +255,7 @@ Now you are ready to use ``dftd3``, check if you can import it with
254
255
  >>> import dftd3
255
256
  >>> from dftd3.library import get_api_version
256
257
  >>> get_api_version()
257
- '1.3.0'
258
+ '1.3.2'
258
259
 
259
260
 
260
261
  Building the extension module
@@ -222,7 +222,7 @@ Now you are ready to use ``dftd3``, check if you can import it with
222
222
  >>> import dftd3
223
223
  >>> from dftd3.library import get_api_version
224
224
  >>> get_api_version()
225
- '1.3.0'
225
+ '1.3.2'
226
226
 
227
227
 
228
228
  Building the extension module
@@ -18,4 +18,4 @@
18
18
  # make sure we have a CFFI available
19
19
  import cffi
20
20
 
21
- __version__ = "1.3.0"
21
+ __version__ = "1.3.2"
@@ -19,7 +19,7 @@
19
19
  project(
20
20
  'dftd3',
21
21
  'c',
22
- version: '1.3.0',
22
+ version: '1.3.2',
23
23
  license: 'LGPL-3.0-or-later',
24
24
  meson_version: '>=0.55,!=1.8.0',
25
25
  default_options: [
@@ -9,7 +9,7 @@ build-backend = "mesonpy"
9
9
 
10
10
  [project]
11
11
  name = "dftd3"
12
- version = "1.3.0"
12
+ version = "1.3.2"
13
13
  description = "Python API of the DFT-D3 project"
14
14
  readme = "README.rst"
15
15
  license.text = "LGPL-3.0-or-later"
@@ -25,6 +25,7 @@ classifiers = [
25
25
  "Programming Language :: Python :: 3.11",
26
26
  "Programming Language :: Python :: 3.12",
27
27
  "Programming Language :: Python :: 3.13",
28
+ "Programming Language :: Python :: 3.14",
28
29
  "Topic :: Scientific/Engineering :: Chemistry",
29
30
  "Topic :: Scientific/Engineering :: Physics",
30
31
  ]
@@ -181,7 +181,7 @@ jobs:
181
181
  --no-rebuild
182
182
  --num-processes 1
183
183
  --suite s-dftd3
184
- -t 2
184
+ -t 10
185
185
  env:
186
186
  OMP_NUM_THREADS: 1,2,1
187
187
 
@@ -92,7 +92,7 @@ jobs:
92
92
  cibw-${{ runner.os }}-
93
93
 
94
94
  - name: Install cibuildwheel
95
- run: python -m pip install "cibuildwheel==2.23.4"
95
+ run: python -m pip install "cibuildwheel==3.4.1"
96
96
 
97
97
  - name: Download sdist
98
98
  uses: actions/download-artifact@v4
@@ -156,9 +156,43 @@ jobs:
156
156
  tag: ${{ github.ref }}
157
157
  overwrite: true
158
158
 
159
- - name: Publish to PyPI
160
- if: ${{ github.event_name == 'release' }}
161
- uses: pypa/gh-action-pypi-publish@release/v1
162
- with:
163
- user: __token__
164
- password: ${{ secrets.PYPI_TOKEN }}
159
+ publish-to-pypi:
160
+ name: Publish to PyPI
161
+ if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes
162
+ needs:
163
+ - sdist
164
+ - wheels
165
+ runs-on: ubuntu-latest
166
+ environment:
167
+ name: pypi
168
+ url: https://pypi.org/p/dftd3
169
+ permissions:
170
+ id-token: write # IMPORTANT: mandatory for trusted publishing
171
+
172
+ steps:
173
+ - name: Download sdist
174
+ uses: actions/download-artifact@v4
175
+ with:
176
+ name: dftd3-python-sdist
177
+ path: dist/
178
+
179
+ - name: Download manylinux wheels
180
+ uses: actions/download-artifact@v4
181
+ with:
182
+ name: dftd3-python-ubuntu-latest
183
+ path: dist/
184
+
185
+ - name: Download windows wheels
186
+ uses: actions/download-artifact@v4
187
+ with:
188
+ name: dftd3-python-windows-latest
189
+ path: dist/
190
+
191
+ - name: Download osx wheels
192
+ uses: actions/download-artifact@v4
193
+ with:
194
+ name: dftd3-python-macos-14
195
+ path: dist/
196
+
197
+ - name: Publish distribution to PyPI
198
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -19,7 +19,7 @@ cmake_minimum_required(VERSION 3.14)
19
19
  project(
20
20
  "s-dftd3"
21
21
  LANGUAGES "Fortran"
22
- VERSION "1.3.0"
22
+ VERSION "1.3.2"
23
23
  DESCRIPTION "Simple reimplementation of the DFT-D3 dispersion model"
24
24
  )
25
25
 
@@ -70,6 +70,10 @@ A list of projects currently using this DFT-D3 implementation is given here.
70
70
  All-electron electronic structure theory with numeric atom-centered orbitals.\ :footcite:`blum2009`
71
71
  `VASP <https://www.vasp.at/>`_: (since 6.6.0)
72
72
  The Vienna Ab initio Simulation Package: atomic scale materials modelling from first principles.\ :footcite:`kresse1999`
73
+ `REST <https://gitee.com/RESTGroup/rest>`_:
74
+ Rust-based Electronic Structure Toolkit is a next-generation electronic structure calculation platform
75
+ developed by the Research Center for Chemical Theory (RCCT) at Fudan University.
76
+ Provides Rust bindings in `dftd3-rs <https://github.com/RESTGroup/dftd3-rs>`_.
73
77
 
74
78
  If your project is using *s-dftd3* feel free to add your project to this list.
75
79
 
@@ -1,15 +1,15 @@
1
1
  name = "s-dftd3"
2
- version = "1.3.0"
2
+ version = "1.3.2"
3
3
  license = "LGPL-3.0-or-later"
4
4
  maintainer = ["@awvwgk"]
5
5
  author = ["Sebastian Ehlert"]
6
- copyright = "2019-2022 Sebastian Ehlert"
6
+ copyright = "2019-2026 Sebastian Ehlert"
7
7
  description = "Simple reimplementation of the DFT-D3 method"
8
8
  keywords = ["dispersion-correction", "quantum-chemistry"]
9
9
 
10
10
  [dependencies]
11
11
  mctc-lib.git = "https://github.com/grimme-lab/mctc-lib"
12
- mctc-lib.tag = "v0.4.1"
12
+ mctc-lib.tag = "v0.5.0"
13
13
 
14
14
  [dev-dependencies]
15
15
  mstore.git = "https://github.com/grimme-lab/mstore"
@@ -17,7 +17,7 @@
17
17
  project(
18
18
  's-dftd3',
19
19
  'fortran',
20
- version: '1.3.0',
20
+ version: '1.3.2',
21
21
  license: 'LGPL-3.0-or-later',
22
22
  meson_version: '>=0.55,!=1.8.0',
23
23
  default_options: [
@@ -222,7 +222,7 @@ Now you are ready to use ``dftd3``, check if you can import it with
222
222
  >>> import dftd3
223
223
  >>> from dftd3.library import get_api_version
224
224
  >>> get_api_version()
225
- '1.3.0'
225
+ '1.3.2'
226
226
 
227
227
 
228
228
  Building the extension module
@@ -18,4 +18,4 @@
18
18
  # make sure we have a CFFI available
19
19
  import cffi
20
20
 
21
- __version__ = "1.3.0"
21
+ __version__ = "1.3.2"
@@ -19,7 +19,7 @@
19
19
  project(
20
20
  'dftd3',
21
21
  'c',
22
- version: '1.3.0',
22
+ version: '1.3.2',
23
23
  license: 'LGPL-3.0-or-later',
24
24
  meson_version: '>=0.55,!=1.8.0',
25
25
  default_options: [
@@ -9,7 +9,7 @@ build-backend = "mesonpy"
9
9
 
10
10
  [project]
11
11
  name = "dftd3"
12
- version = "1.3.0"
12
+ version = "1.3.2"
13
13
  description = "Python API of the DFT-D3 project"
14
14
  readme = "README.rst"
15
15
  license.text = "LGPL-3.0-or-later"
@@ -25,6 +25,7 @@ classifiers = [
25
25
  "Programming Language :: Python :: 3.11",
26
26
  "Programming Language :: Python :: 3.12",
27
27
  "Programming Language :: Python :: 3.13",
28
+ "Programming Language :: Python :: 3.14",
28
29
  "Topic :: Scientific/Engineering :: Chemistry",
29
30
  "Topic :: Scientific/Engineering :: Physics",
30
31
  ]
@@ -964,7 +964,7 @@ end subroutine set_gcp_realspace_cutoff
964
964
  subroutine delete_gcp_api(vgcp) &
965
965
  & bind(C, name=namespace//"delete_gcp")
966
966
  type(c_ptr), intent(inout) :: vgcp
967
- type(vp_error), pointer :: gcp
967
+ type(vp_gcp), pointer :: gcp
968
968
 
969
969
  if (c_associated(vgcp)) then
970
970
  call c_f_pointer(vgcp, gcp)
@@ -329,9 +329,9 @@ subroutine get_atm_dispersion_derivs(mol, trans, cutoff, s9, rs9, alp, rvdw, c6,
329
329
  energy_local(jat) = energy_local(jat) - dE/3.0_wp
330
330
  energy_local(kat) = energy_local(kat) - dE/3.0_wp
331
331
 
332
- gradient_local(:, iat) = gradient_local(:, iat) - dGij - dGik
333
- gradient_local(:, jat) = gradient_local(:, jat) + dGij - dGjk
334
- gradient_local(:, kat) = gradient_local(:, kat) + dGik + dGjk
332
+ gradient_local(:, iat) = gradient_local(:, iat) - (dGij + dGik) * triple
333
+ gradient_local(:, jat) = gradient_local(:, jat) + (dGij - dGjk) * triple
334
+ gradient_local(:, kat) = gradient_local(:, kat) + (dGik + dGjk) * triple
335
335
 
336
336
  do ic = 1, 3
337
337
  do jc = 1, 3
@@ -99,6 +99,7 @@ subroutine get_dispersion_atomic(mol, disp, param, cutoff, energies, gradient, s
99
99
  call param%get_dispersion3(mol, lattr, cutoff%disp3, disp%rvdw, disp%r4r2, c6, dc6dcn, &
100
100
  & energies, dEdcn, gradient, sigma)
101
101
  if (grad) then
102
+ call get_lattice_points(mol%periodic, mol%lattice, cutoff%cn, lattr)
102
103
  call add_coordination_number_derivs(mol, lattr, cutoff%cn, disp%rcov, dEdcn, &
103
104
  & gradient, sigma)
104
105
  end if
@@ -24,10 +24,10 @@ module dftd3_version
24
24
 
25
25
 
26
26
  !> String representation of the s-dftd3 version
27
- character(len=*), parameter :: dftd3_version_string = "1.3.0"
27
+ character(len=*), parameter :: dftd3_version_string = "1.3.2"
28
28
 
29
29
  !> Numeric representation of the s-dftd3 version
30
- integer, parameter :: dftd3_version_compact(3) = [1, 3, 0]
30
+ integer, parameter :: dftd3_version_compact(3) = [1, 3, 2]
31
31
 
32
32
 
33
33
  contains
@@ -1,4 +1,4 @@
1
1
  [wrap-git]
2
2
  directory = mctc-lib
3
3
  url = https://github.com/grimme-lab/mctc-lib
4
- revision = v0.4.1
4
+ revision = v0.5.1
@@ -1,4 +1,4 @@
1
1
  [wrap-git]
2
2
  directory = toml-f
3
3
  url = https://github.com/toml-f/toml-f
4
- revision = v0.4.2
4
+ revision = v0.5.0
@@ -51,10 +51,10 @@ subroutine collect_periodic(testsuite)
51
51
  & new_unittest("M06L-D3(0)", test_m06ld3zero_cyanamide), &
52
52
  & new_unittest("rPW86PBE-D3(0)", test_rpw86pbed3zero_co2), &
53
53
  & new_unittest("revSSB-D3(0)", test_revssbd3zero_cytosine), &
54
- ! new_unittest("HSEsol-D3(BJ)-ATM", test_hsesold3bjatm_oxacb), &
54
+ & new_unittest("HSEsol-D3(BJ)-ATM", test_hsesold3bjatm_oxacb), &
55
55
  ! new_unittest("PWGGA-D3(BJ)-ATM", test_pwggad3bjatm_pyrazine), &
56
- ! new_unittest("B3PW91-D3(0)-ATM", test_b3pw91d3zeroatm_urea), &
57
- ! new_unittest("RPBE-D3(0)-ATM", test_rpbed3zeroatm_hexamine) &
56
+ & new_unittest("B3PW91-D3(0)-ATM", test_b3pw91d3zeroatm_urea), &
57
+ & new_unittest("RPBE-D3(0)-ATM", test_rpbed3zeroatm_hexamine), &
58
58
  & new_unittest("revPBE-D3(BJ)", test_revpbed3bj_1d), &
59
59
  & new_unittest("BP86-D3(0)", test_bp86d3zero_2d) &
60
60
  & ]
@@ -90,7 +90,7 @@ subroutine test_dftd3_gen(error, mol, param, ref)
90
90
  end subroutine test_dftd3_gen
91
91
 
92
92
 
93
- subroutine test_numgrad(error, mol, param)
93
+ subroutine test_numgrad(error, mol, param, thr_in)
94
94
 
95
95
  !> Error handling
96
96
  type(error_type), allocatable, intent(out) :: error
@@ -101,37 +101,112 @@ subroutine test_numgrad(error, mol, param)
101
101
  !> Damping parameters
102
102
  class(damping_param), intent(in) :: param
103
103
 
104
+ !> Gradient threshold
105
+ real(wp), intent(in), optional :: thr_in
106
+
104
107
  integer :: iat, ic
105
108
  type(d3_model) :: d3
106
- real(wp) :: energy, er, el, sigma(3, 3)
109
+ real(wp) :: energy, er, el, sigma(3, 3), thr_grad, numerr
107
110
  real(wp), allocatable :: gradient(:, :), numgrad(:, :)
108
111
  real(wp), parameter :: step = 1.0e-6_wp
112
+ logical :: tight
109
113
 
110
114
  allocate(gradient(3, mol%nat), numgrad(3, mol%nat))
111
115
  call new_d3_model(d3, mol)
116
+ thr_grad = thr2
117
+ if (present(thr_in)) thr_grad = thr_in
118
+ tight = present(thr_in)
112
119
 
113
120
  do iat = 1, mol%nat
114
121
  do ic = 1, 3
115
- mol%xyz(ic, iat) = mol%xyz(ic, iat) + step
116
- call get_dispersion(mol, d3, param, cutoff, er)
117
- mol%xyz(ic, iat) = mol%xyz(ic, iat) - 2*step
118
- call get_dispersion(mol, d3, param, cutoff, el)
119
- mol%xyz(ic, iat) = mol%xyz(ic, iat) + step
120
- numgrad(ic, iat) = 0.5_wp*(er - el)/step
122
+ if (tight) then
123
+ call ridders_cartesian(ic, iat, numgrad(ic, iat), numerr)
124
+ else
125
+ mol%xyz(ic, iat) = mol%xyz(ic, iat) + step
126
+ call get_dispersion(mol, d3, param, cutoff, er)
127
+ mol%xyz(ic, iat) = mol%xyz(ic, iat) - 2*step
128
+ call get_dispersion(mol, d3, param, cutoff, el)
129
+ mol%xyz(ic, iat) = mol%xyz(ic, iat) + step
130
+ numgrad(ic, iat) = 0.5_wp*(er - el)/step
131
+ end if
121
132
  end do
122
133
  end do
123
134
 
124
135
  call get_dispersion(mol, d3, param, cutoff, energy, gradient, sigma)
125
136
 
126
- if (any(abs(gradient - numgrad) > thr2)) then
137
+ if (any(abs(gradient - numgrad) > thr_grad)) then
127
138
  call test_failed(error, "Gradient of dispersion energy does not match")
128
139
  print'(3es21.14)', gradient-numgrad
129
140
  end if
130
141
 
142
+ contains
143
+
144
+ subroutine ridders_cartesian(ic, iat, deriv, err)
145
+
146
+ integer, intent(in) :: ic, iat
147
+ real(wp), intent(out) :: deriv, err
148
+
149
+ integer, parameter :: max_tab = 10
150
+ real(wp), parameter :: initial_step = 1.0e-4_wp
151
+ real(wp), parameter :: step_div = sqrt(2.0_wp)
152
+ real(wp), parameter :: step_div_2 = step_div**2
153
+ integer :: iter, order
154
+ real(wp) :: table(max_tab, max_tab), factor, err_est, prev_deriv, prev_err
155
+ real(wp) :: h, x0
156
+
157
+ x0 = mol%xyz(ic, iat)
158
+ h = initial_step
159
+ err = huge(1.0_wp)
160
+ prev_err = err
161
+
162
+ mol%xyz(ic, iat) = x0 + h
163
+ call get_dispersion(mol, d3, param, cutoff, er)
164
+ mol%xyz(ic, iat) = x0 - h
165
+ call get_dispersion(mol, d3, param, cutoff, el)
166
+ table(1, 1) = 0.5_wp*(er - el)/h
167
+ deriv = table(1, 1)
168
+ prev_deriv = deriv
169
+
170
+ do iter = 2, max_tab
171
+ h = h / step_div
172
+ mol%xyz(ic, iat) = x0 + h
173
+ call get_dispersion(mol, d3, param, cutoff, er)
174
+ mol%xyz(ic, iat) = x0 - h
175
+ call get_dispersion(mol, d3, param, cutoff, el)
176
+ table(iter, 1) = 0.5_wp*(er - el)/h
177
+
178
+ factor = step_div_2
179
+ do order = 1, iter - 1
180
+ factor = factor * step_div_2
181
+ table(iter, order + 1) = (factor*table(iter, order) &
182
+ & - table(iter - 1, order))/(factor - 1.0_wp)
183
+ err_est = max(abs(table(iter, order + 1) - table(iter, order)), &
184
+ & abs(table(iter, order + 1) - table(iter - 1, order)))
185
+ if (err_est <= err) then
186
+ err = err_est
187
+ deriv = table(iter, order + 1)
188
+ end if
189
+ end do
190
+
191
+ if (abs(table(iter, iter) - table(iter - 1, iter - 1)) >= 2*err &
192
+ & .and. iter > 2) then
193
+ deriv = prev_deriv
194
+ err = prev_err
195
+ exit
196
+ end if
197
+
198
+ prev_deriv = deriv
199
+ prev_err = err
200
+ end do
201
+
202
+ mol%xyz(ic, iat) = x0
203
+
204
+ end subroutine ridders_cartesian
205
+
131
206
  end subroutine test_numgrad
132
207
 
133
208
 
134
- subroutine test_numsigma(error, mol, param)
209
+ subroutine test_numsigma(error, mol, param, thr_in)
135
210
 
136
211
  !> Error handling
137
212
  type(error_type), allocatable, intent(out) :: error
@@ -142,44 +217,131 @@ subroutine test_numsigma(error, mol, param)
142
217
  !> Damping parameters
143
218
  class(damping_param), intent(in) :: param
144
219
 
220
+ !> Strain derivative threshold
221
+ real(wp), intent(in), optional :: thr_in
222
+
145
223
  integer :: ic, jc
146
224
  type(d3_model) :: d3
147
225
  real(wp) :: energy, er, el, sigma(3, 3), eps(3, 3), numsigma(3, 3), lattice(3, 3)
226
+ real(wp) :: thr_sigma, numerr
148
227
  real(wp), allocatable :: gradient(:, :), xyz(:, :)
149
228
  real(wp), parameter :: unity(3, 3) = reshape(&
150
229
  & [1, 0, 0, 0, 1, 0, 0, 0, 1], shape(unity))
151
230
  real(wp), parameter :: step = 1.0e-7_wp
231
+ logical :: tight
152
232
 
153
233
  allocate(gradient(3, mol%nat), xyz(3, mol%nat))
154
234
  call new_d3_model(d3, mol)
235
+ thr_sigma = thr3
236
+ if (present(thr_in)) thr_sigma = thr_in
237
+ tight = present(thr_in)
155
238
 
156
239
  eps(:, :) = unity
157
240
  xyz(:, :) = mol%xyz
158
241
  lattice(:, :) = mol%lattice
159
242
  do ic = 1, 3
160
243
  do jc = 1, 3
161
- eps(jc, ic) = eps(jc, ic) + step
162
- mol%xyz(:, :) = matmul(eps, xyz)
163
- mol%lattice(:, :) = matmul(eps, lattice)
164
- call get_dispersion(mol, d3, param, cutoff, er)
165
- eps(jc, ic) = eps(jc, ic) - 2*step
166
- mol%xyz(:, :) = matmul(eps, xyz)
167
- mol%lattice(:, :) = matmul(eps, lattice)
168
- call get_dispersion(mol, d3, param, cutoff, el)
169
- eps(jc, ic) = eps(jc, ic) + step
170
- mol%xyz(:, :) = xyz
171
- mol%lattice(:, :) = lattice
172
- numsigma(jc, ic) = 0.5_wp*(er - el)/step
244
+ if (tight) then
245
+ call ridders_strain(ic, jc, numsigma(jc, ic), numerr)
246
+ else
247
+ eps(jc, ic) = eps(jc, ic) + step
248
+ mol%xyz(:, :) = matmul(eps, xyz)
249
+ mol%lattice(:, :) = matmul(eps, lattice)
250
+ call get_dispersion(mol, d3, param, cutoff, er)
251
+ eps(jc, ic) = eps(jc, ic) - 2*step
252
+ mol%xyz(:, :) = matmul(eps, xyz)
253
+ mol%lattice(:, :) = matmul(eps, lattice)
254
+ call get_dispersion(mol, d3, param, cutoff, el)
255
+ eps(jc, ic) = eps(jc, ic) + step
256
+ mol%xyz(:, :) = xyz
257
+ mol%lattice(:, :) = lattice
258
+ numsigma(jc, ic) = 0.5_wp*(er - el)/step
259
+ end if
173
260
  end do
174
261
  end do
175
262
 
176
263
  call get_dispersion(mol, d3, param, cutoff, energy, gradient, sigma)
177
264
 
178
- if (any(abs(sigma - numsigma) > thr3)) then
265
+ if (any(abs(sigma - numsigma) > thr_sigma)) then
179
266
  call test_failed(error, "Strain derivatives do not match")
180
267
  print'(3es21.14)', sigma-numsigma
181
268
  end if
182
269
 
270
+ contains
271
+
272
+ subroutine ridders_strain(ic, jc, deriv, err)
273
+
274
+ integer, intent(in) :: ic, jc
275
+ real(wp), intent(out) :: deriv, err
276
+
277
+ integer, parameter :: max_tab = 10
278
+ real(wp), parameter :: initial_step = 5.0e-8_wp
279
+ real(wp), parameter :: step_div = sqrt(2.0_wp)
280
+ real(wp), parameter :: step_div_2 = step_div**2
281
+ integer :: iter, order
282
+ real(wp) :: table(max_tab, max_tab), factor, err_est, prev_deriv, prev_err
283
+ real(wp) :: h
284
+
285
+ h = initial_step
286
+ err = huge(1.0_wp)
287
+ prev_err = err
288
+
289
+ call strain_energy(ic, jc, h, er)
290
+ call strain_energy(ic, jc, -h, el)
291
+ table(1, 1) = 0.5_wp*(er - el)/h
292
+ deriv = table(1, 1)
293
+ prev_deriv = deriv
294
+
295
+ do iter = 2, max_tab
296
+ h = h / step_div
297
+ call strain_energy(ic, jc, h, er)
298
+ call strain_energy(ic, jc, -h, el)
299
+ table(iter, 1) = 0.5_wp*(er - el)/h
300
+
301
+ factor = step_div_2
302
+ do order = 1, iter - 1
303
+ factor = factor * step_div_2
304
+ table(iter, order + 1) = (factor*table(iter, order) &
305
+ & - table(iter - 1, order))/(factor - 1.0_wp)
306
+ err_est = max(abs(table(iter, order + 1) - table(iter, order)), &
307
+ & abs(table(iter, order + 1) - table(iter - 1, order)))
308
+ if (err_est <= err) then
309
+ err = err_est
310
+ deriv = table(iter, order + 1)
311
+ end if
312
+ end do
313
+
314
+ if (abs(table(iter, iter) - table(iter - 1, iter - 1)) >= 2*err &
315
+ & .and. iter > 2) then
316
+ deriv = prev_deriv
317
+ err = prev_err
318
+ exit
319
+ end if
320
+
321
+ prev_deriv = deriv
322
+ prev_err = err
323
+ end do
324
+
325
+ mol%xyz(:, :) = xyz
326
+ mol%lattice(:, :) = lattice
327
+
328
+ end subroutine ridders_strain
329
+
330
+ subroutine strain_energy(ic, jc, step, energy)
331
+
332
+ integer, intent(in) :: ic, jc
333
+ real(wp), intent(in) :: step
334
+ real(wp), intent(out) :: energy
335
+ real(wp) :: strain(3, 3)
336
+
337
+ strain(:, :) = unity
338
+ strain(jc, ic) = strain(jc, ic) + step
339
+ mol%xyz(:, :) = matmul(strain, xyz)
340
+ mol%lattice(:, :) = matmul(strain, lattice)
341
+ call get_dispersion(mol, d3, param, cutoff, energy)
342
+
343
+ end subroutine strain_energy
344
+
183
345
  end subroutine test_numsigma
184
346
 
185
347
 
@@ -340,7 +502,7 @@ subroutine test_hsesold3bjatm_oxacb(error)
340
502
 
341
503
  call get_structure(mol, "X23", "oxacb")
342
504
  call new_rational_damping(param, inp)
343
- call test_numgrad(error, mol, param)
505
+ call test_numgrad(error, mol, param, 1.0e-11_wp)
344
506
 
345
507
  end subroutine test_hsesold3bjatm_oxacb
346
508
 
@@ -358,7 +520,7 @@ subroutine test_pwggad3bjatm_pyrazine(error)
358
520
 
359
521
  call get_structure(mol, "X23", "pyrazine")
360
522
  call new_rational_damping(param, inp)
361
- call test_numsigma(error, mol, param)
523
+ call test_numsigma(error, mol, param, 1.0e-8_wp)
362
524
 
363
525
  end subroutine test_pwggad3bjatm_pyrazine
364
526
 
@@ -376,7 +538,7 @@ subroutine test_b3pw91d3zeroatm_urea(error)
376
538
 
377
539
  call get_structure(mol, "X23", "urea")
378
540
  call new_zero_damping(param, inp)
379
- call test_numgrad(error, mol, param)
541
+ call test_numgrad(error, mol, param, 1.0e-11_wp)
380
542
 
381
543
  end subroutine test_b3pw91d3zeroatm_urea
382
544
 
@@ -394,7 +556,7 @@ subroutine test_rpbed3zeroatm_hexamine(error)
394
556
 
395
557
  call get_structure(mol, "X23", "hexamine")
396
558
  call new_zero_damping(param, inp)
397
- call test_numsigma(error, mol, param)
559
+ call test_numsigma(error, mol, param, 1.0e-8_wp)
398
560
 
399
561
  end subroutine test_rpbed3zeroatm_hexamine
400
562
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes