TABLE OF CONTENTS


ABINIT/m_xgTools [ Modules ]

[ Top ] [ Modules ]

NAME

  m_xgTools

FUNCTION

 This is a module to manage and help developer with 2D arrays for low level routines.
 Particularly, it manages memory for allocations and deallocations (see xg_routines),
 It handles MPI, complex and real values (*8 kind only) automatically.
 It is also possible to build sub-block of an array and work on it very easily (see xgBlock_routines)
 Several routines are also available for performing blas/lapack which again
 manage the type and MPI (and openmp if needed)
 Almost all routines are timed by abinit timers
 This is a starting point and has to be improved/developed
 An example of how to use those types and routines can be found in
 30_diago/m_lobpcg2.F90. This is a full rewrite of LOBPCG algorithm which uses
 only these types to perfom calculations.

COPYRIGHT

  Copyright (C) 2016-2024 ABINIT group (J. Bieder, MS)
  This file is distributed under the terms of the
  GNU General Public License, see ~abinit/COPYING
  or http://www.gnu.org/copyleft/gpl.txt .

NOTES

SOURCE

 28 #if defined HAVE_CONFIG_H
 29 #include "config.h"
 30 #endif
 31 
 32 #include "abi_common.h"
 33 
 34 module m_xg
 35 
 36   use, intrinsic :: iso_c_binding, only: c_loc, c_double, c_double_complex, c_int32_t, c_size_t, c_ptr
 37 
 38   use m_errors
 39   use m_abicore
 40   use defs_basis
 41   use m_time, only : timab
 42   use m_xmpi
 43   use m_xomp
 44   use m_abi_linalg
 45 
 46 #if defined HAVE_MPI2
 47  use mpi
 48 #endif
 49 
 50 #if defined(HAVE_GPU)
 51   use m_gpu_toolbox
 52 #endif
 53 
 54 #if defined(HAVE_KOKKOS)
 55   use m_xg_kokkos
 56 #endif
 57 
 58 #if defined HAVE_YAKL
 59  use gator_mod
 60 #endif
 61 
 62   implicit none
 63 
 64   private
 65 
 66   integer, parameter, public :: SPACE_R =  1
 67   integer, parameter, public :: SPACE_C =  2
 68   integer, parameter, public :: SPACE_CR = 3
 69 
 70   integer, parameter, public :: COLS2ROWS =  1
 71   integer, parameter, public :: ROWS2COLS = -1
 72 
 73   integer, parameter :: tim_gemm_blas  = 1670
 74   integer, parameter :: tim_trsm       = 1671
 75   integer, parameter :: tim_potrf      = 1672
 76   integer, parameter :: tim_set        = 1673
 77   integer, parameter :: tim_get        = 1674
 78   integer, parameter :: tim_heev       = 1675
 79   integer, parameter :: tim_heevd      = 1676
 80   integer, parameter :: tim_hpev       = 1677
 81   integer, parameter :: tim_hpevd      = 1678
 82   integer, parameter :: tim_hegv       = 1679
 83   integer, parameter :: tim_hegvx      = 1680
 84   integer, parameter :: tim_hegvd      = 1681
 85   integer, parameter :: tim_hpgv       = 1682
 86   integer, parameter :: tim_hpgvx      = 1683
 87   integer, parameter :: tim_hpgvd      = 1684
 88   integer, parameter :: tim_copy       = 1685
 89   integer, parameter :: tim_cshift     = 1686
 90   integer, parameter :: tim_pack       = 1687
 91   integer, parameter :: tim_gemm_mpi   = 1688
 92 
 93   integer, save, private :: lrwork = 0
 94   integer, save, private :: lcwork = 0
 95   integer, save, private :: liwork = 0
 96   integer,                        allocatable, save, private :: iwork(:)
 97   real(kind=c_double),            allocatable, save, private :: rwork(:)
 98   complex(kind=c_double_complex), allocatable, save, private :: cwork(:)
 99 
100   type, public :: xgBlock_t
101     integer, private :: space
102     integer, private :: rows
103     integer, private :: LDim
104     integer, private :: cols
105     character, public :: trans
106     character, public :: normal
107     integer, private :: spacedim_comm
108     integer, private :: gpu_option
109     real(kind=c_double)            , ABI_CONTIGUOUS pointer, private :: vecR(:,:) => null()
110     complex(kind=c_double_complex) , ABI_CONTIGUOUS pointer, private :: vecC(:,:) => null()
111   end type xgBlock_t
112 
113   type, public :: xg_t
114     integer, private :: space
115     integer, private :: rows
116     integer, private :: cols
117     character, public :: trans
118     character, public :: normal
119     integer, private :: spacedim_comm
120     !FIXME Settle this
121     real(kind=c_double)            , ABI_CONTIGUOUS pointer, private :: vecR(:,:) => null()
122     complex(kind=c_double_complex) , ABI_CONTIGUOUS pointer, private :: vecC(:,:) => null()
123     integer, private :: gpu_option
124     type(xgBlock_t), public :: self
125   end type xg_t
126 
127   interface xgBlock_gemm
128     module procedure xgBlock_gemmR
129     module procedure xgBlock_gemmC
130   end interface xgBlock_gemm
131 
132   interface xgBlock_saxpy
133     module procedure xgBlock_saxpyR
134     module procedure xgBlock_saxpyC
135   end interface xgBlock_saxpy
136 
137   interface xgBlock_colwiseMul
138     module procedure xgBlock_colwiseMulR
139     module procedure xgBlock_colwiseMulC
140   end interface xgBlock_colwiseMul
141 
142   interface xgBlock_trsm
143     module procedure xgBlock_trsmR
144     module procedure xgBlock_trsmC
145   end interface xgBlock_trsm
146 
147   interface xgBlock_scale
148     module procedure xgBlock_scaleR
149     module procedure xgBlock_scaleC
150   end interface xgBlock_scale
151 
152   interface checkResize
153     module procedure checkResizeI
154     module procedure checkResizeR
155     module procedure checkResizeC
156   end interface checkResize
157 
158   public :: space
159   public :: cols
160   public :: rows
161   public :: comm
162   public :: gpu_option
163   public :: xgBlock_setComm
164   private :: getClocR
165   private :: getClocC
166   private :: checkResize
167 
168   public :: xg_init
169   public :: xg_set
170   public :: xg_get
171   public :: xg_setBlock
172   public :: xg_free
173 
174   public :: xg_associated
175 
176   public :: xgBlock_setBlock
177   public :: xgBlock_set
178   public :: xgBlock_map
179   public :: xgBlock_reverseMap
180   public :: xgBlock_prefetch_async
181   public :: xgBlock_get
182   public :: xgBlock_copy
183   public :: xgBlock_pack
184   public :: xgBlock_getSize
185 
186   public :: xgBlock_check
187   public :: xgBlock_check_gpu_option
188 
189   public :: xgBlock_potrf
190   public :: xgBlock_trsm
191 
192   public :: xgBlock_heev
193   public :: xgBlock_heevd
194 
195   public :: xgBlock_hpev
196   public :: xgBlock_hpevd
197 
198   public :: xgBlock_hegv
199   public :: xgBlock_hegvx
200   public :: xgBlock_hegvd
201 
202   public :: xgBlock_hpgv
203   public :: xgBlock_hpgvx
204   public :: xgBlock_hpgvd
205 
206   public :: xgBlock_gemm
207   public :: xgBlock_add
208   public :: xgBlock_cshift
209   public :: xgBlock_colwiseNorm2
210   public :: xgBlock_colwiseDotProduct
211   public :: xgBlock_colwiseDivision
212   public :: xgBlock_colwiseCymax
213   public :: xgBlock_saxpy
214   public :: xgBlock_colwiseMul
215   public :: xgBlock_scale
216 
217   public :: xgBlock_apply_diag_nospin
218 
219   public :: xgBlock_zero
220   public :: xgBlock_one
221   public :: xgBlock_diagonal
222   public :: xgBlock_diagonalOnly
223 
224   public :: xgBlock_minmax
225   public :: xgBlock_average
226   public :: xgBlock_deviation
227 
228   public :: xgBlock_reshape
229   public :: xgBlock_reshape_spinor
230   public :: xgBlock_print
231   public :: xgBlock_getId
232   public :: xgBlock_copy_from_gpu
233   public :: xgBlock_copy_to_gpu
234   public :: xg_finalize
235 
236 contains

m_xg/checkResizeC [ Functions ]

[ Top ] [ Functions ]

NAME

 checkResizeC

m_xg/checkResizeI [ Functions ]

[ Top ] [ Functions ]

NAME

 checkResizeI

m_xg/checkResizeR [ Functions ]

[ Top ] [ Functions ]

NAME

 checkResizeR

m_xg/cols [ Functions ]

[ Top ] [ Functions ]

NAME

 cols

m_xg/comm [ Functions ]

[ Top ] [ Functions ]

NAME

 comm

m_xg/getClocC [ Functions ]

[ Top ] [ Functions ]

NAME

 getClocC

m_xg/getClocR [ Functions ]

[ Top ] [ Functions ]

NAME

 getClocR

m_xg/gpu_option [ Functions ]

[ Top ] [ Functions ]

NAME

 gpu_option

m_xg/rows [ Functions ]

[ Top ] [ Functions ]

NAME

 rows

m_xg/setComm [ Functions ]

[ Top ] [ Functions ]

NAME

 setComm

m_xg/space [ Functions ]

[ Top ] [ Functions ]

NAME

 space

m_xg/xg_associated [ Functions ]

[ Top ] [ Functions ]

NAME

 xg_associated

m_xg/xg_finalize [ Functions ]

[ Top ] [ Functions ]

NAME

 xg_finalize

m_xg/xg_free [ Functions ]

[ Top ] [ Functions ]

NAME

 xg_free

m_xg/xg_get [ Functions ]

[ Top ] [ Functions ]

NAME

 xg_get

m_xg/xg_init [ Functions ]

[ Top ] [ Functions ]

NAME

 xg_init

m_xg/xg_set [ Functions ]

[ Top ] [ Functions ]

NAME

 xg_set

m_xg/xg_setBlock [ Functions ]

[ Top ] [ Functions ]

NAME

 xg_setBlock

m_xg/xgBlock_add [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_add

m_xg/xgBlock_apply_diag_nospin [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_apply_diag_nospin

m_xg/xgBlock_average [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_average

m_xg/xgBlock_check [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_check

m_xg/xgBlock_check_gpu_option [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_check_gpu_option

m_xg/xgBlock_colwiseCymax [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_colwiseCymax

m_xg/xgBlock_colwiseDivision [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_colwiseDivision

m_xg/xgBlock_colwiseDotProduct [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_colwiseDotProduct

m_xg/xgBlock_colwiseMulC [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_colwiseMulC

m_xg/xgBlock_colwiseMulR [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_colwiseMulR

m_xg/xgBlock_colwiseNorm2 [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_colwiseNorm2

m_xg/xgBlock_copy [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_copy

m_xg/xgBlock_copy_from_gpu [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_copy_from_gpu

m_xg/xgBlock_copy_to_gpu [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_copy_to_gpu

m_xg/xgBlock_cshift [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_cshift

m_xg/xgBlock_deviation [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_deviation

m_xg/xgBlock_diagonal [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_diagonal

m_xg/xgBlock_diagonalOnly [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_diagonalOnly

m_xg/xgBlock_gemmC [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_gemmC

m_xg/xgBlock_gemmR [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_gemmR

m_xg/xgBlock_get [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_get

m_xg/xgBlock_getid [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_getid

m_xg/xgBlock_getSize [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_getSize

m_xg/xgBlock_heev [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_heev

m_xg/xgBlock_heevd [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_heevd

m_xg/xgBlock_hegvd [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_hegvd

m_xg/xgBlock_hegvx [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_hegvx

m_xg/xgBlock_hgev [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_hgev

m_xg/xgBlock_hpev [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_hpev

m_xg/xgBlock_hpevd [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_hpevd

m_xg/xgBlock_hpgv [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_hpgv

m_xg/xgBlock_hpgvd [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_hpgvd

m_xg/xgBlock_hpgvx [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_hpgvx

m_xg/xgBlock_map [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_map

m_xg/xgBlock_minmax [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_minmax

m_xg/xgBlock_one [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_one

m_xg/xgBlock_pack [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_pack

m_xg/xgBlock_potrf [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_potrf

m_xg/xgBlock_prefetch_async [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_prefetch_async

m_xg/xgBlock_print [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_print

m_xg/xgBlock_reshape [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_reshape

m_xg/xgBlock_reshape_spinor [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_reshape_spinor

m_xg/xgBlock_reverseMap [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_reverseMap

m_xg/xgBlock_saxpyC [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_saxpyC

m_xg/xgBlock_saxpyR [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_saxpyR

m_xg/xgBlock_scaleC [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_scaleC

m_xg/xgBlock_scaleR [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_scaleR

m_xg/xgBlock_set [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_set

m_xg/xgBlock_setBlock [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_setBlock

m_xg/xgBlock_trsmC [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_trsmC

m_xg/xgBlock_trsmR [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_trsmR

m_xg/xgBlock_zero [ Functions ]

[ Top ] [ Functions ]

NAME

 xgBlock_zero