TABLE OF CONTENTS
- ABINIT/m_xgTools
- m_xg/checkResizeC
- m_xg/checkResizeI
- m_xg/checkResizeR
- m_xg/cols
- m_xg/getClocC
- m_xg/getClocR
- m_xg/space
- m_xg/xg_finalize
- m_xg/xg_free
- m_xg/xg_get
- m_xg/xg_init
- m_xg/xg_set
- m_xg/xg_setBlock
- m_xg/xgBlock_add
- m_xg/xgBlock_average
- m_xg/xgBlock_colwiseCaxmy
- m_xg/xgBlock_colwiseMulC
- m_xg/xgBlock_colwiseMulR
- m_xg/xgBlock_colwiseNorm2
- m_xg/xgBlock_copy
- m_xg/xgBlock_cshift
- m_xg/xgBlock_deviation
- m_xg/xgBlock_diagonal
- m_xg/xgBlock_diagonalOnly
- m_xg/xgBlock_gemmC
- m_xg/xgBlock_gemmR
- m_xg/xgBlock_get
- m_xg/xgBlock_getSize
- m_xg/xgBlock_heev
- m_xg/xgBlock_heevd
- m_xg/xgBlock_hegvd
- m_xg/xgBlock_hegvx
- m_xg/xgBlock_hgev
- m_xg/xgBlock_hpev
- m_xg/xgBlock_hpevd
- m_xg/xgBlock_hpgv
- m_xg/xgBlock_hpgvd
- m_xg/xgBlock_hpgvx
- m_xg/xgBlock_map
- m_xg/xgBlock_one
- m_xg/xgBlock_pack
- m_xg/xgBlock_potrf
- m_xg/xgBlock_print
- m_xg/xgBlock_reshape
- m_xg/xgBlock_reverseMap
- m_xg/xgBlock_scaleC
- m_xg/xgBlock_scaleR
- m_xg/xgBlock_set
- m_xg/xgBlock_setBlock
- m_xg/xgBlock_trsmC
- m_xg/xgBlock_trsmR
- m_xg/xgBlock_zero
ABINIT/m_xgTools [ 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-2018 ABINIT group (J. Bieder) 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
PARENTS
CHILDREN
SOURCE
33 #if defined HAVE_CONFIG_H 34 #include "config.h" 35 #endif 36 37 #include "abi_common.h" 38 39 module m_xg 40 use defs_basis, only : std_err, std_out 41 use m_profiling_abi 42 use m_xmpi, only : xmpi_sum 43 use m_errors 44 implicit none 45 46 private 47 48 integer, parameter, public :: SPACE_R = 1 49 integer, parameter, public :: SPACE_C = 2 50 integer, parameter, public :: SPACE_CR = 3 51 52 integer, parameter :: tim_potrf = 1670 53 integer, parameter :: tim_trsm = 1671 54 integer, parameter :: tim_gemm = 1672 55 integer, parameter :: tim_set = 1673 56 integer, parameter :: tim_get = 1674 57 integer, parameter :: tim_heev = 1675 58 integer, parameter :: tim_heevd = 1676 59 integer, parameter :: tim_hpev = 1677 60 integer, parameter :: tim_hpevd = 1678 61 integer, parameter :: tim_hegv = 1679 62 integer, parameter :: tim_hegvx = 1680 63 integer, parameter :: tim_hegvd = 1681 64 integer, parameter :: tim_hpgv = 1682 65 integer, parameter :: tim_hpgvx = 1683 66 integer, parameter :: tim_hpgvd = 1684 67 integer, parameter :: tim_copy = 1685 68 integer, parameter :: tim_cshift= 1686 69 integer, parameter :: tim_pack = 1687 70 71 integer, save, private :: lrwork = 0 72 integer, save, private :: lcwork = 0 73 integer, save, private :: liwork = 0 74 integer, allocatable, save, private :: iwork(:) 75 double precision, allocatable, save, private :: rwork(:) 76 complex(kind= 8), allocatable, save, private :: cwork(:) 77 78 type, public :: xgBlock_t 79 integer, private :: space 80 integer, private :: rows 81 integer, private :: LDim 82 integer, private :: cols 83 character, public :: trans 84 character, public :: normal 85 integer, private :: spacedim_comm 86 double precision, pointer, private :: vecR(:,:) => null() 87 complex(kind=8) , pointer, private :: vecC(:,:) => null() 88 end type xgBlock_t 89 90 type, public :: xg_t 91 integer, private :: space 92 integer, private :: rows 93 integer, private :: cols 94 character, public :: trans 95 character, public :: normal 96 integer, private :: spacedim_comm 97 double precision, allocatable, private :: vecR(:,:) 98 complex(kind=8) , allocatable, private :: vecC(:,:) 99 type(xgBlock_t), public :: self 100 end type xg_t 101 102 interface xgBlock_gemm 103 module procedure xgBlock_gemmR 104 module procedure xgBlock_gemmC 105 end interface 106 107 interface xgBlock_colwiseMul 108 module procedure xgBlock_colwiseMulR 109 module procedure xgBlock_colwiseMulC 110 end interface 111 112 interface xgBlock_trsm 113 module procedure xgBlock_trsmR 114 module procedure xgBlock_trsmC 115 end interface 116 117 interface xgBlock_scale 118 module procedure xgBlock_scaleR 119 module procedure xgBlock_scaleC 120 end interface 121 122 interface checkResize 123 module procedure checkResizeI 124 module procedure checkResizeR 125 module procedure checkResizeC 126 end interface 127 128 public :: space 129 public :: cols 130 private :: getClocR 131 private :: getClocC 132 private :: checkResize 133 134 public :: xg_init 135 public :: xg_set 136 public :: xg_get 137 public :: xg_setBlock 138 public :: xg_free 139 140 public :: xgBlock_setBlock 141 public :: xgBlock_set 142 public :: xgBlock_map 143 public :: xgBlock_reverseMap 144 public :: xgBlock_get 145 public :: xgBlock_copy 146 public :: xgBlock_pack 147 public :: xgBlock_getSize 148 149 public :: xgBlock_potrf 150 public :: xgBlock_trsm 151 152 public :: xgBlock_heev 153 public :: xgBlock_heevd 154 155 public :: xgBlock_hpev 156 public :: xgBlock_hpevd 157 158 public :: xgBlock_hegv 159 public :: xgBlock_hegvx 160 public :: xgBlock_hegvd 161 162 public :: xgBlock_hpgv 163 public :: xgBlock_hpgvx 164 public :: xgBlock_hpgvd 165 166 public :: xgBlock_gemm 167 public :: xgBlock_add 168 public :: xgBlock_cshift 169 public :: xgBlock_colwiseNorm2 170 public :: xgBlock_colwiseCaxmy 171 public :: xgBlock_colwiseMul 172 public :: xgBlock_scale 173 174 public :: xgBlock_zero 175 public :: xgBlock_one 176 public :: xgBlock_diagonal 177 public :: xgBlock_diagonalOnly 178 179 public :: xgBlock_average 180 public :: xgBlock_deviation 181 182 public :: xgBlock_reshape 183 public :: xgBlock_print 184 public :: xg_finalize 185 186 187 contains
m_xg/checkResizeC [ Functions ]
NAME
checkResizeC
m_xg/checkResizeI [ Functions ]
NAME
checkResizeI
m_xg/checkResizeR [ Functions ]
NAME
checkResizeR
m_xg/cols [ Functions ]
NAME
cols
m_xg/getClocC [ Functions ]
NAME
getClocC
m_xg/getClocR [ Functions ]
NAME
getClocR
m_xg/space [ Functions ]
NAME
space
m_xg/xg_finalize [ Functions ]
NAME
xg_finalize
m_xg/xg_free [ Functions ]
NAME
xg_free
m_xg/xg_get [ Functions ]
NAME
xg_get
m_xg/xg_init [ Functions ]
NAME
xg_init
m_xg/xg_set [ Functions ]
NAME
xg_set
m_xg/xg_setBlock [ Functions ]
NAME
xg_setBlock
m_xg/xgBlock_add [ Functions ]
NAME
xgBlock_add
m_xg/xgBlock_average [ Functions ]
NAME
xgBlock_average
m_xg/xgBlock_colwiseCaxmy [ Functions ]
NAME
xgBlock_colwiseCaxmy
m_xg/xgBlock_colwiseMulC [ Functions ]
NAME
xgBlock_colwiseMulC
m_xg/xgBlock_colwiseMulR [ Functions ]
NAME
xgBlock_colwiseMulR
m_xg/xgBlock_colwiseNorm2 [ Functions ]
NAME
xgBlock_colwiseNorm2
m_xg/xgBlock_copy [ Functions ]
NAME
xgBlock_copy
m_xg/xgBlock_cshift [ Functions ]
NAME
xgBlock_cshift
m_xg/xgBlock_deviation [ Functions ]
NAME
xgBlock_deviation
m_xg/xgBlock_diagonal [ Functions ]
NAME
xgBlock_diagonal
m_xg/xgBlock_diagonalOnly [ Functions ]
NAME
xgBlock_diagonalOnly
m_xg/xgBlock_gemmC [ Functions ]
NAME
xgBlock_gemmC
m_xg/xgBlock_gemmR [ Functions ]
NAME
xgBlock_gemmR
m_xg/xgBlock_get [ Functions ]
NAME
xgBlock_get
m_xg/xgBlock_getSize [ Functions ]
NAME
xgBlock_getSize
m_xg/xgBlock_heev [ Functions ]
NAME
xgBlock_heev
m_xg/xgBlock_heevd [ Functions ]
NAME
xgBlock_heevd
m_xg/xgBlock_hegvd [ Functions ]
NAME
xgBlock_hegvd
m_xg/xgBlock_hegvx [ Functions ]
NAME
xgBlock_hegvx
m_xg/xgBlock_hgev [ Functions ]
NAME
xgBlock_hgev
m_xg/xgBlock_hpev [ Functions ]
NAME
xgBlock_hpev
m_xg/xgBlock_hpevd [ Functions ]
NAME
xgBlock_hpevd
m_xg/xgBlock_hpgv [ Functions ]
NAME
xgBlock_hpgv
m_xg/xgBlock_hpgvd [ Functions ]
NAME
xgBlock_hpgvd
m_xg/xgBlock_hpgvx [ Functions ]
NAME
xgBlock_hpgvx
m_xg/xgBlock_map [ Functions ]
NAME
xgBlock_map
m_xg/xgBlock_one [ Functions ]
NAME
xgBlock_one
m_xg/xgBlock_pack [ Functions ]
NAME
xgBlock_pack
m_xg/xgBlock_potrf [ Functions ]
NAME
xgBlock_potrf
m_xg/xgBlock_print [ Functions ]
NAME
xgBlock_print
m_xg/xgBlock_reshape [ Functions ]
NAME
xgBlock_reshape
m_xg/xgBlock_reverseMap [ Functions ]
NAME
xgBlock_reverseMap
m_xg/xgBlock_scaleC [ Functions ]
NAME
xgBlock_scaleC
m_xg/xgBlock_scaleR [ Functions ]
NAME
xgBlock_scaleR
m_xg/xgBlock_set [ Functions ]
NAME
xgBlock_set
m_xg/xgBlock_setBlock [ Functions ]
NAME
xgBlock_setBlock
m_xg/xgBlock_trsmC [ Functions ]
NAME
xgBlock_trsmC
m_xg/xgBlock_trsmR [ Functions ]
NAME
xgBlock_trsmR
m_xg/xgBlock_zero [ Functions ]
NAME
xgBlock_zero