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-11-09 22:30:52 Functions: 12.5 % 8 1
Branches: 30.0 % 40 12

             Branch data     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