LCOV - code coverage report
Current view: top level - src/78_effpot - m_lattice_lwf_map.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 37.5 % 16 6
Test Date: 2026-09-19 17:42:43 Functions: 28.6 % 7 2

            Line data    Source code
       1              : !!****m* ABINIT/m_lattice_lwf_map
       2              : !! NAME
       3              : !! m_lattice_lwf_map
       4              : !!
       5              : !! FUNCTION
       6              : !! This module contains the functions to map between Lattice and lwf, including the amplitude, and the force.
       7              : !!
       8              : !!
       9              : !! Subroutines:
      10              : !!
      11              : !! COPYRIGHT
      12              : !! Copyright (C) 2001-2026 ABINIT group (hexu)
      13              : !! This file is distributed under the terms of the
      14              : !! GNU General Public License, see ~abinit/COPYING
      15              : !! or http://www.gnu.org/copyleft/gpl.txt .
      16              : !! For the initials of contributors, see ~abinit/doc/developers/contributors.txt .
      17              : !!
      18              : !! SOURCE
      19              : 
      20              : 
      21              : #if defined HAVE_CONFIG_H
      22              : #include "config.h"
      23              : #endif
      24              : #include "abi_common.h"
      25              : 
      26              : module m_lattice_lwf_map
      27              :   use, intrinsic :: iso_c_binding
      28              :   !use m_dynamic_array, only: int_array_type, real_array_type, int2d_array_type
      29              :   use defs_basis
      30              :   use m_abicore
      31              :   use m_errors
      32              :   use m_nctk
      33              :   !use m_spmat_spvec, only: sp_real_vec
      34              :   use m_spmat_coo, only: COO_mat_t
      35              :   use netcdf
      36              :   implicit none
      37              :   private
      38              :   !!***
      39              : 
      40              :   type, public :: lwf_latt_coeff_t
      41              :      type(COO_mat_t), public :: coeffs
      42              :    contains
      43              :      procedure :: initialize
      44              :      procedure :: finalize
      45              :      procedure :: lattice_to_lwf_projection
      46              :      procedure :: lwf_force_to_lattice
      47              :      procedure :: lwf_amp_to_displacements
      48              :   end type lwf_latt_coeff_t
      49              : 
      50              : contains
      51              : 
      52            1 :   subroutine initialize(self, nlwf, natom)
      53              :     class(lwf_latt_coeff_t), intent(inout) :: self
      54              :     integer, intent(in) :: nlwf, natom
      55            3 :     call self%coeffs%initialize([natom, nlwf])
      56            1 :   end subroutine initialize
      57              : 
      58           12 :   subroutine finalize(self)
      59              :     class(lwf_latt_coeff_t), intent(inout) :: self
      60           12 :     call self%coeffs%finalize()
      61           12 :   end subroutine finalize
      62              : 
      63              : 
      64              : !===============================================================
      65              : ! Project lattice distortion amplitudes to lwf amplitudes
      66              : !> @
      67              : !===============================================================
      68            0 :   subroutine lattice_to_lwf_projection(self, latt_amp, lwf_amp)
      69              :     class(lwf_latt_coeff_t), intent(in) :: self
      70              :     real(dp), intent(in) :: latt_amp(:,:)
      71              :     real(dp), intent(inout) :: lwf_amp(:)
      72              :     ! integer :: ilwf, nlwf
      73              :     ! nlwf=size(coeffs)
      74              :     ! do ilwf=1, nlwf
      75              :     !    lwf_amp(ilwf) = coeffs(ilwf)%dot(latt_amp)
      76              :     ! end do
      77            0 :     call self%coeffs%mv(latt_amp, lwf_amp)
      78            0 :   end subroutine lattice_to_lwf_projection
      79              : 
      80              :   !===============================================================
      81              :   ! Map force on lwf to force on lattice
      82              :   !> @
      83              :   !===============================================================
      84            0 :   subroutine lwf_force_to_lattice(self, lwf_force, latt_force)
      85              :     class(lwf_latt_coeff_t), intent(in) :: self
      86              :     real(dp), intent(in) :: lwf_force(:)
      87              :     real(dp), intent(out) :: latt_force(:,:)
      88              :     !nlwf=size(coeffs)
      89              :     !do ilwf=1, nlwf
      90              :     !   call coeffs(ilwf)%plus_Ax(lwf_force(ilwf), latt_force)
      91              :     !end do
      92            0 :     call self%coeffs%mv_left(lwf_force, latt_force)
      93            0 :   end subroutine lwf_force_to_lattice
      94              : 
      95              :   !===============================================================
      96              :   ! Map lwf amplitudes to lattice amplitudes
      97              :   !> @
      98              :   !===============================================================
      99            0 :   subroutine lwf_amp_to_displacements(self, lwf, displacement)
     100              :     class(lwf_latt_coeff_t), intent(in) :: self
     101              :     real(dp), intent(in) :: lwf(:)
     102              :     real(dp), intent(inout) :: displacement(:,:)
     103              :     ! integer :: ilwf, nlwf
     104              :     ! nlwf=size(coeffs)
     105              :     ! do ilwf=1, nlwf
     106              :     !    call coeffs(ilwf)%plus_Ax(lwf(ilwf), displacement)
     107              :     ! end do
     108            0 :     call self%coeffs%mv_left(lwf, displacement)
     109            0 :   end subroutine lwf_amp_to_displacements
     110              : 
     111            0 : end module m_lattice_lwf_map
     112              : 
        

Generated by: LCOV version 2.3-1