计算化学公社

 找回密码 Forget password
 注册 Register
Views: 469|回复 Reply: 1
打印 Print 上一主题 Last thread 下一主题 Next thread

[CP2K] 请教优化结构用rVV10,任务一开始就报错qs_dispersion_nonloc.F:1430

[复制链接 Copy URL]

36

帖子

0

威望

499

eV
积分
535

Level 4 (黑子)

本帖最后由 白菜 于 2025-9-5 11:55 编辑

老师们好,我在超算(cp2k-2024.1)上提交了一个变胞优化任务,输入文件部分如下(完整.inp和.out文件已上传),计算一开始就中止了,提示:CPASSERT failed   qs_dispersion_nonloc.F:1430
rVV10_kernel_table.dat文件检查过了,存在且大致和网上的一样。不知道是什么问题想请教老师们怎么解决。
    &XC
      &XC_FUNCTIONAL
        &MGGA_X_R2SCAN
        &END MGGA_X_R2SCAN
        &MGGA_C_R2SCAN
        &END MGGA_C_R2SCAN
      &END XC_FUNCTIONAL
      &VDW_POTENTIAL
        POTENTIAL_TYPE NON_LOCAL
        &NON_LOCAL
          TYPE RVV10
          PARAMETERS 11.95 0.0093
          KERNEL_FILE_NAME rVV10_kernel_table.dat
        &END NON_LOCAL
      &END VDW_POTENTIAL
    &END XC
    &MGRID
      CUTOFF  600
      REL_CUTOFF  60
    &END MGRID
下面是我找的一些资料:
CP2K: qs_dispersion_nonloc.F Source File
   ! **************************************************************************************************
   !! This routine is modeled after an algorithm from "Numerical Recipes in C" by Cambridge
   !! University Press, page 97.  Adapted for Fortran and the problem at hand.  This function is used to
   !! find the Phi_alpha_beta needed for equations 8 and 11 of SOLER.
! **************************************************************************************************
!> \brief ...
!> \param k ...
!> \param kernel_of_k ...
!> \param dispersion_env ...
!> \par History
!>     Optimised when adding OpenMP to vdw_energy (which calls this routine): Aug 2016 MTucker
! **************************************************************************************************
   SUBROUTINE interpolate_kernel(k, kernel_of_k, dispersion_env)
      REAL(dp), INTENT(in)                               :: k
      REAL(dp), INTENT(out)                              :: kernel_of_k(:, :)
      TYPE(qs_dispersion_type), POINTER                  :: dispersion_env

      INTEGER                                            :: k_i, nr_points, q1_i, q2_i
      REAL(dp)                                           :: a, b, c, const, d, dk, r_max
      REAL(dp), DIMENSION(:, :, :), POINTER              :: d2phi_dk2, kernel

      nr_points = dispersion_env%nr_points
      r_max = dispersion_env%r_max
      dk = dispersion_env%dk
      kernel => dispersion_env%kernel
      d2phi_dk2 => dispersion_env%d2phi_dk2

      !! Check to make sure that the kernel table we have is capable of dealing with this
      !! value of k.  If k is larger than Nr_points*2*pi/r_max then we can't perform the
      !! interpolation.  In that case, a kernel file should be generated with a larger number
      !! of radial points.
      !! -------------------------------------------------------------------------------------
      cpassert(k < nr_points*dk)
      !! -------------------------------------------------------------------------------------
      kernel_of_k = 0.0_dp         1430行
      !! This integer division figures out which bin k is in since the kernel
      !! is set on a uniform grid.
      k_i = int(k/dk)

      !! Test to see if we are trying to interpolate a k that is one of the actual
      !! function points we have.  The value is just the value of the function in that
      !! case.
      !! ----------------------------------------------------------------------------------------
      IF (mod(k, dk) == 0) THEN
         DO q1_i = 1, dispersion_env%Nqs
            DO q2_i = 1, q1_i
               kernel_of_k(q1_i, q2_i) = kernel(k_i, q1_i, q2_i)
               kernel_of_k(q2_i, q1_i) = kernel(k_i, q2_i, q1_i)
            END DO
         END DO
         RETURN
      END IF
      !! ----------------------------------------------------------------------------------------
      !! If we are not on a function point then we carry out the interpolation
      !! ----------------------------------------------------------------------------------------
      const = dk*dk/6.0_dp
      a = (dk*(k_i + 1.0_dp) - k)/dk
      b = (k - dk*k_i)/dk
      c = (a**3 - a)*const
      d = (b**3 - b)*const
      DO q1_i = 1, dispersion_env%Nqs
         DO q2_i = 1, q1_i
            kernel_of_k(q1_i, q2_i) = a*kernel(k_i, q1_i, q2_i) + b*kernel(k_i + 1, q1_i, q2_i) &
                                      + (c*d2phi_dk2(k_i, q1_i, q2_i) + d*d2phi_dk2(k_i + 1, q1_i, q2_i))
            kernel_of_k(q2_i, q1_i) = kernel_of_k(q1_i, q2_i)
         END DO
      END DO

   END SUBROUTINE interpolate_kernel
NON_LOCAL — CP2K documentation


6万

帖子

99

威望

6万

eV
积分
125122

管理员

公社社长

2#
发表于 Post on 2025-9-3 10:46:44 | 只看该作者 Only view this author
不建议拿带rVV10色散校正的泛函做这种任务,没额外好处,耗时还很高。PBEsol是干这个的很好选择
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-2-18 00:12 , Processed in 0.201857 second(s), 20 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list