LCOV - code coverage report
Current view: top level - src - qs_nonscf_utils.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:71c3ab0) Lines: 89.4 % 66 59
Test Date: 2026-07-25 06:35:44 Functions: 100.0 % 1 1

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \brief Routines for Quickstep NON-SCF run.
      10              : !> \par History
      11              : !>      - initial setup [JGH, 2024]
      12              : !> \author JGH (13.05.2024)
      13              : ! **************************************************************************************************
      14              : MODULE qs_nonscf_utils
      15              :    USE cp_control_types,                ONLY: dft_control_type
      16              :    USE kinds,                           ONLY: dp
      17              :    USE machine,                         ONLY: m_flush
      18              :    USE qs_charges_types,                ONLY: qs_charges_type
      19              :    USE qs_energy_types,                 ONLY: qs_energy_type
      20              :    USE qs_environment_types,            ONLY: get_qs_env,&
      21              :                                               qs_environment_type
      22              :    USE qs_rho_types,                    ONLY: qs_rho_get,&
      23              :                                               qs_rho_type
      24              : #include "./base/base_uses.f90"
      25              : 
      26              :    IMPLICIT NONE
      27              : 
      28              :    PRIVATE
      29              : 
      30              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_nonscf_utils'
      31              : 
      32              :    PUBLIC :: qs_nonscf_print_summary
      33              : 
      34              : CONTAINS
      35              : 
      36              : ! **************************************************************************************************
      37              : !> \brief writes a summary of information after diagonalization
      38              : !> \param qs_env ...
      39              : !> \param tdiag ...
      40              : !> \param nelectron_total ...
      41              : !> \param iounit ...
      42              : ! **************************************************************************************************
      43         2896 :    SUBROUTINE qs_nonscf_print_summary(qs_env, tdiag, nelectron_total, iounit)
      44              :       TYPE(qs_environment_type), POINTER                 :: qs_env
      45              :       REAL(KIND=dp), INTENT(IN)                          :: tdiag
      46              :       INTEGER, INTENT(IN)                                :: nelectron_total, iounit
      47              : 
      48         2896 :       REAL(KIND=dp), DIMENSION(:), POINTER               :: tot_rho_r
      49              :       TYPE(dft_control_type), POINTER                    :: dft_control
      50              :       TYPE(qs_charges_type), POINTER                     :: qs_charges
      51              :       TYPE(qs_energy_type), POINTER                      :: energy
      52              :       TYPE(qs_rho_type), POINTER                         :: rho
      53              : 
      54         2896 :       IF (iounit > 0) THEN
      55         1448 :          CALL get_qs_env(qs_env=qs_env, energy=energy, dft_control=dft_control)
      56         1448 :          IF (qs_env%harris_method) THEN
      57           22 :             CPASSERT(.NOT. dft_control%qs_control%gapw)
      58           22 :             CPASSERT(.NOT. dft_control%qs_control%gapw_xc)
      59              : 
      60           22 :             CALL get_qs_env(qs_env=qs_env, rho=rho, qs_charges=qs_charges)
      61           22 :             CALL qs_rho_get(rho, tot_rho_r=tot_rho_r)
      62              :             WRITE (UNIT=iounit, FMT="(/,(T3,A,T41,2F20.10))") &
      63           22 :                "Electronic density on regular grids: ", &
      64           51 :                SUM(tot_rho_r), &
      65           51 :                SUM(tot_rho_r) + nelectron_total, &
      66           22 :                "Core density on regular grids:", &
      67           22 :                qs_charges%total_rho_core_rspace, &
      68           44 :                qs_charges%total_rho_core_rspace - REAL(nelectron_total + dft_control%charge, dp)
      69              :             WRITE (UNIT=iounit, FMT="(T3,A,T41,F20.10)") &
      70           22 :                "Total charge density on r-space grids:     ", &
      71              :                SUM(tot_rho_r) + &
      72           51 :                qs_charges%total_rho_core_rspace, &
      73           22 :                "Total charge density g-space grids:     ", &
      74           44 :                qs_charges%total_rho_gspace
      75              : 
      76              :             WRITE (UNIT=iounit, FMT="(/,T2,A,T40,A,F10.2,T61,F20.10)") &
      77           22 :                "Diagonalization", "Time:", tdiag, energy%band
      78              : 
      79              :             WRITE (UNIT=iounit, FMT="((T3,A,T56,F25.14))") &
      80           22 :                "Core Hamiltonian energy:                       ", energy%core, &
      81           22 :                "Overlap energy of the core charge distribution:", energy%core_overlap, &
      82           22 :                "Self energy of the core charge distribution:   ", energy%core_self, &
      83           22 :                "Hartree energy:                                ", energy%hartree, &
      84           44 :                "Exchange-correlation energy:                   ", energy%exc
      85           22 :             IF (energy%dispersion /= 0.0_dp) THEN
      86              :                WRITE (UNIT=iounit, FMT="(T3,A,T56,F25.14)") &
      87           22 :                   "Dispersion energy:                             ", energy%dispersion
      88              :             END IF
      89           22 :             IF (energy%gcp /= 0.0_dp) THEN
      90              :                WRITE (UNIT=iounit, FMT="(T3,A,T56,F25.14)") &
      91            0 :                   "gCP energy:                                    ", energy%gcp
      92              :             END IF
      93           22 :             IF (energy%efield /= 0.0_dp) THEN
      94              :                WRITE (UNIT=iounit, FMT="(T3,A,T56,F25.14)") &
      95            0 :                   "Electric field interaction energy:          ", energy%efield
      96              :             END IF
      97              : 
      98         1426 :          ELSE IF (dft_control%qs_control%semi_empirical) THEN
      99            0 :             CPABORT("NONSCF not available")
     100         1426 :          ELSE IF (dft_control%qs_control%dftb) THEN
     101          439 :             CPASSERT(energy%dftb3 == 0.0_dp)
     102          439 :             energy%total = energy%total + energy%band + energy%qmmm_el
     103              :             WRITE (UNIT=iounit, FMT="(/,T2,A,T40,A,F10.2,T61,F20.10)") &
     104          439 :                "Diagonalization", "Time:", tdiag, energy%total
     105              :             WRITE (UNIT=iounit, FMT="((T3,A,T56,F25.14))") &
     106          439 :                "Core Hamiltonian energy:                       ", energy%core, &
     107          439 :                "Repulsive potential energy:                    ", energy%repulsive, &
     108          878 :                "Dispersion energy:                             ", energy%dispersion
     109          439 :             IF (energy%efield /= 0.0_dp) THEN
     110              :                WRITE (UNIT=iounit, FMT="(T3,A,T56,F25.14)") &
     111            0 :                   "Electric field interaction energy:          ", energy%efield
     112              :             END IF
     113          987 :          ELSE IF (dft_control%qs_control%xtb) THEN
     114          987 :             energy%total = energy%total + energy%band + energy%qmmm_el
     115              :             WRITE (UNIT=iounit, FMT="(/,T2,A,T40,A,F10.2,T61,F20.10)") &
     116          987 :                "Diagonalization", "Time:", tdiag, energy%total
     117          987 :             CPASSERT(dft_control%qs_control%xtb_control%gfn_type == 0)
     118              :             WRITE (UNIT=iounit, FMT="((T3,A,T56,F25.14))") &
     119          987 :                "Core Hamiltonian energy:                       ", energy%core, &
     120          987 :                "Repulsive potential energy:                    ", energy%repulsive, &
     121          987 :                "SRB Correction energy:                         ", energy%srb, &
     122          987 :                "Charge equilibration energy:                   ", energy%eeq, &
     123         1974 :                "Dispersion energy:                             ", energy%dispersion
     124          987 :             IF (dft_control%qs_control%xtb_control%do_nonbonded) THEN
     125              :                WRITE (UNIT=iounit, FMT="(T3,A,T56,F25.14)") &
     126            0 :                   "Correction for nonbonded interactions:         ", energy%xtb_nonbonded
     127              :             END IF
     128          987 :             IF (energy%efield /= 0.0_dp) THEN
     129              :                WRITE (UNIT=iounit, FMT="(T3,A,T56,F25.14)") &
     130          116 :                   "Electric field interaction energy:          ", energy%efield
     131              :             END IF
     132              :          ELSE
     133            0 :             CPABORT("NONSCF not available")
     134              :          END IF
     135         1448 :          IF (dft_control%smear) THEN
     136              :             WRITE (UNIT=iounit, FMT="((T3,A,T56,F25.14))") &
     137          548 :                "Electronic entropic energy:", energy%kTS
     138              :             WRITE (UNIT=iounit, FMT="((T3,A,T56,F25.14))") &
     139          548 :                "Fermi energy:", energy%efermi
     140              :          END IF
     141         1448 :          IF (energy%qmmm_el /= 0.0_dp) THEN
     142              :             WRITE (UNIT=iounit, FMT="(T3,A,T56,F25.14)") &
     143          167 :                "QM/MM Electrostatic energy:                    ", energy%qmmm_el
     144          167 :             IF (qs_env%qmmm_env_qm%image_charge) THEN
     145              :                WRITE (UNIT=iounit, FMT="(T3,A,T56,F25.14)") &
     146            0 :                   "QM/MM image charge energy:                ", energy%image_charge
     147              :             END IF
     148              :          END IF
     149              : 
     150              :          WRITE (UNIT=iounit, FMT="(/,(T3,A,T56,F25.14))") &
     151         1448 :             "Total energy:                                  ", energy%total
     152              : 
     153         1448 :          CALL m_flush(iounit)
     154              :       END IF
     155              : 
     156         2896 :    END SUBROUTINE qs_nonscf_print_summary
     157              : 
     158              : END MODULE qs_nonscf_utils
        

Generated by: LCOV version 2.0-1