LCOV - code coverage report
Current view: top level - src/78_effpot - m_spmat_base.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 22.7 % 22 5
Test Date: 2026-09-21 22:40:37 Functions: 12.5 % 8 1

            Line data    Source code
       1              : !!****m* ABINIT/m_spmat_base
       2              : !! NAME
       3              : !! m_spmat_base
       4              : !!
       5              : !! FUNCTION
       6              : !! This module contains the base type for sparse matrix.
       7              : !!
       8              : !! Datatypes:
       9              : !!  base_mat_t: base sparse matrix.
      10              : !!
      11              : !! Subroutines:
      12              : !! TODO: add this when F2003 doc style is determined.
      13              : !!
      14              : !!
      15              : !! COPYRIGHT
      16              : !! Copyright (C) 2001-2026 ABINIT group (hexu)
      17              : !! This file is distributed under the terms of the
      18              : !! GNU General Public License, see ~abinit/COPYING
      19              : !! or http://www.gnu.org/copyleft/gpl.txt .
      20              : !! For the initials of contributors, see ~abinit/doc/developers/contributors.txt .
      21              : !!
      22              : !! SOURCE
      23              : 
      24              : #if defined HAVE_CONFIG_H
      25              : #include "config.h"
      26              : #endif
      27              : #include "abi_common.h"
      28              : 
      29              : 
      30              : module m_spmat_base
      31              :   use defs_basis
      32              :   use m_errors
      33              :   use m_abicore
      34              :   use m_xmpi
      35              :   implicit none
      36              :   private
      37              : !!***
      38              : 
      39              :   !-----------------------------------------------------------------------
      40              :   !> @brief base type for sparse matrices
      41              :   !-----------------------------------------------------------------------
      42              :   type, public :: base_mat_t
      43              :      integer :: ndim                       ! number of dimensions
      44              :      integer, allocatable:: mshape(:)      ! shape of matrix
      45              :    contains
      46              :      procedure :: initialize
      47              :      procedure :: finalize
      48              :      procedure :: add_entry          ! add one entry to  matrix
      49              :   end type base_mat_t
      50              : 
      51              :   type, public, extends(base_mat_t) ::  base_mat2d_t
      52              :      integer :: nrow, ncol           ! number of rows and columns
      53              :    contains
      54              :      procedure :: initialize => base_mat2d_t_initialize
      55              :      procedure :: mv => base_mat2d_t_mv         ! matrix vector multiplication
      56              :   end type base_mat2d_t
      57              : 
      58              : contains
      59              : 
      60              :   !-----------------------------------------------------------------------
      61              :   !> @brief initialize
      62              :   !> @param [in] mshape: shape of matrix
      63              :   !-----------------------------------------------------------------------
      64            3 :   subroutine initialize(self, mshape)
      65              :     class(base_mat_t), intent(inout) :: self
      66              :     integer, intent(in) :: mshape(:)
      67            3 :     self%ndim=size(mshape)
      68            9 :     ABI_MALLOC(self%mshape, (self%ndim))
      69           12 :     self%mshape=mshape
      70            3 :   end subroutine initialize
      71              : 
      72              :   !-----------------------------------------------------------------------
      73              :   !> @brief finalize
      74              :   !-----------------------------------------------------------------------
      75            0 :   subroutine finalize(self)
      76              :     class(base_mat_t), intent(inout) :: self
      77            0 :     self%ndim=0
      78            0 :     if (allocated(self%mshape)) then
      79            0 :        ABI_FREE(self%mshape)
      80              :     endif
      81            0 :   end subroutine finalize
      82              : 
      83              :   !-----------------------------------------------------------------------
      84              :   !> @brief add one entry to matrix
      85              :   !> @param [in]  ind: the indices of the entry
      86              :   !> @param [in]  val: the value of the entry
      87              :   !-----------------------------------------------------------------------
      88            0 :   subroutine add_entry(self, ind, val)
      89              :     class(base_mat_t), intent(inout) :: self
      90              :     integer, intent(in) :: ind(self%ndim)
      91              :     real(dp), intent(in) :: val
      92              :     ABI_UNUSED(ind)
      93              :     ABI_UNUSED(val)
      94            0 :   end subroutine add_entry
      95              : 
      96              :   !-----------------------------------------------------------------------
      97              :   !> @brief initialize
      98              :   !> @param [in] mshape: shape of matrix. should be size 2
      99              :   !-----------------------------------------------------------------------
     100            0 :   subroutine base_mat2d_t_initialize(self,mshape)
     101              :     class(base_mat2d_t), intent(inout) :: self
     102              :     integer, intent(in) :: mshape(:)
     103            0 :     call self%base_mat_t%initialize(mshape)
     104            0 :     self%nrow=mshape(1)
     105            0 :     self%ncol=mshape(2)
     106            0 :   end subroutine base_mat2d_t_initialize
     107              : 
     108              :   !-----------------------------------------------------------------------
     109              :   !> @brief Matrix vector multiplication M x = b
     110              :   !> @param [in] x
     111              :   !> @param [out] b
     112              :   !-----------------------------------------------------------------------
     113            0 :   subroutine base_mat2d_t_mv(self, x, b)
     114              :     class(base_mat2d_t), intent(in) :: self
     115              :     real(dp), intent(in) :: x(self%ncol)
     116              :     real(dp), intent(out) :: b(self%nrow)
     117            0 :     ABI_UNUSED_A(x)
     118            0 :     ABI_UNUSED_A(b)
     119            0 :   end subroutine base_mat2d_t_mv
     120              : 
     121            0 : end module m_spmat_base
        

Generated by: LCOV version 2.3-1