30 USE dbcsr_api,
ONLY: dbcsr_type
35#include "./base/base_uses.f90"
41 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'soc_pseudopotential_utils'
59 nstart_row, nstart_col, factor, add_also_herm_conj)
61 TYPE(dbcsr_type) :: mat_source
63 INTEGER :: nstart_row, nstart_col
64 COMPLEX(KIND=dp) :: factor
65 LOGICAL :: add_also_herm_conj
67 CHARACTER(LEN=*),
PARAMETER :: routinen =
'add_dbcsr_submat'
69 INTEGER :: handle, nao
72 TYPE(
cp_fm_type) :: fm_mat_work_double_im, fm_mat_work_im
74 CALL timeset(routinen, handle)
76 CALL cp_fm_create(fm_mat_work_double_im, cfm_mat_target%matrix_struct)
79 CALL cp_cfm_create(cfm_mat_work_double, cfm_mat_target%matrix_struct)
80 CALL cp_cfm_create(cfm_mat_work_double_2, cfm_mat_target%matrix_struct)
92 s_firstrow=1, s_firstcol=1, &
93 t_firstrow=nstart_row, t_firstcol=nstart_col)
101 IF (add_also_herm_conj)
THEN
111 CALL timestop(handle)
123 REAL(kind=
dp),
DIMENSION(:) :: alpha
125 CHARACTER(LEN=*),
PARAMETER :: routinen =
'cfm_add_on_diag'
127 INTEGER :: handle, i_global, i_row, j_col, &
128 j_global, nao, ncol_local, nrow_local
129 INTEGER,
DIMENSION(:),
POINTER :: col_indices, row_indices
131 CALL timeset(routinen, handle)
134 nrow_local=nrow_local, &
135 ncol_local=ncol_local, &
136 row_indices=row_indices, &
137 col_indices=col_indices)
141 DO j_col = 1, ncol_local
142 j_global = col_indices(j_col)
143 DO i_row = 1, nrow_local
144 i_global = row_indices(i_row)
145 IF (j_global == i_global)
THEN
146 IF (i_global .LE. nao)
THEN
147 cfm%local_data(i_row, j_col) = cfm%local_data(i_row, j_col) + alpha(i_global)*
z_one
149 cfm%local_data(i_row, j_col) = cfm%local_data(i_row, j_col) + alpha(i_global - nao)*
z_one
155 CALL timestop(handle)
166 SUBROUTINE add_fm_submat(cfm_mat_target, fm_mat_source, nstart_row, nstart_col)
170 INTEGER :: nstart_row, nstart_col
172 CHARACTER(LEN=*),
PARAMETER :: routinen =
'add_fm_submat'
174 INTEGER :: handle, nao
177 CALL timeset(routinen, handle)
179 CALL cp_fm_create(fm_mat_work_double_re, cfm_mat_target%matrix_struct)
185 nrow=nao, ncol=nao, &
186 s_firstrow=1, s_firstcol=1, &
187 t_firstrow=nstart_row, t_firstcol=nstart_col)
193 CALL timestop(handle)
205 SUBROUTINE add_cfm_submat(cfm_mat_target, cfm_mat_source, nstart_row, nstart_col, factor)
207 TYPE(
cp_cfm_type) :: cfm_mat_target, cfm_mat_source
208 INTEGER :: nstart_row, nstart_col
209 COMPLEX(KIND=dp),
OPTIONAL :: factor
211 CHARACTER(LEN=*),
PARAMETER :: routinen =
'add_cfm_submat'
213 COMPLEX(KIND=dp) :: factor_im, factor_re
214 INTEGER :: handle, nao
215 TYPE(
cp_fm_type) :: fm_mat_source_im, fm_mat_source_re, &
216 fm_mat_work_double_im, &
217 fm_mat_work_double_re
219 CALL timeset(routinen, handle)
221 CALL cp_fm_create(fm_mat_work_double_re, cfm_mat_target%matrix_struct)
222 CALL cp_fm_create(fm_mat_work_double_im, cfm_mat_target%matrix_struct)
226 CALL cp_fm_create(fm_mat_source_re, cfm_mat_source%matrix_struct)
227 CALL cp_fm_create(fm_mat_source_im, cfm_mat_source%matrix_struct)
228 CALL cp_cfm_to_fm(cfm_mat_source, fm_mat_source_re, fm_mat_source_im)
233 nrow=nao, ncol=nao, &
234 s_firstrow=1, s_firstcol=1, &
235 t_firstrow=nstart_row, t_firstcol=nstart_col)
238 nrow=nao, ncol=nao, &
239 s_firstrow=1, s_firstcol=1, &
240 t_firstrow=nstart_row, t_firstcol=nstart_col)
242 IF (
PRESENT(factor))
THEN
258 CALL timestop(handle)
269 SUBROUTINE get_cfm_submat(cfm_mat_target, cfm_mat_source, nstart_row, nstart_col)
271 TYPE(
cp_cfm_type) :: cfm_mat_target, cfm_mat_source
272 INTEGER :: nstart_row, nstart_col
274 CHARACTER(LEN=*),
PARAMETER :: routinen =
'get_cfm_submat'
276 INTEGER :: handle, nao
277 TYPE(
cp_fm_type) :: fm_mat_source_double_im, &
278 fm_mat_source_double_re, &
279 fm_mat_work_im, fm_mat_work_re
281 CALL timeset(routinen, handle)
283 CALL cp_fm_create(fm_mat_source_double_re, cfm_mat_source%matrix_struct)
284 CALL cp_fm_create(fm_mat_source_double_im, cfm_mat_source%matrix_struct)
285 CALL cp_cfm_to_fm(cfm_mat_source, fm_mat_source_double_re, fm_mat_source_double_im)
287 CALL cp_fm_create(fm_mat_work_re, cfm_mat_target%matrix_struct)
288 CALL cp_fm_create(fm_mat_work_im, cfm_mat_target%matrix_struct)
295 nrow=nao, ncol=nao, &
296 s_firstrow=nstart_row, s_firstcol=nstart_col, &
297 t_firstrow=1, t_firstcol=1)
300 nrow=nao, ncol=nao, &
301 s_firstrow=nstart_row, s_firstcol=nstart_col, &
302 t_firstrow=1, t_firstcol=1)
304 CALL cp_fm_to_cfm(fm_mat_work_re, fm_mat_work_im, cfm_mat_target)
311 CALL timestop(handle)
324 CHARACTER(LEN=*),
PARAMETER :: routinen =
'create_cfm_double'
326 INTEGER :: handle, ncol_global_orig, &
330 CALL timeset(routinen, handle)
332 CALL cp_fm_get_info(matrix=fm_orig, nrow_global=nrow_global_orig, ncol_global=ncol_global_orig)
335 nrow_global=2*nrow_global_orig, &
336 ncol_global=2*ncol_global_orig, &
337 template_fmstruct=fm_orig%matrix_struct)
343 CALL timestop(handle)
Basic linear algebra operations for complex full matrices.
subroutine, public cp_cfm_scale_and_add(alpha, matrix_a, beta, matrix_b)
Scale and add two BLACS matrices (a = alpha*a + beta*b).
subroutine, public cp_cfm_transpose(matrix, trans, matrixt)
Transposes a BLACS distributed complex matrix.
subroutine, public cp_cfm_scale_and_add_fm(alpha, matrix_a, beta, matrix_b)
Scale and add two BLACS matrices (a = alpha*a + beta*b). where b is a real matrix (adapted from cp_cf...
Represents a complex full matrix distributed on many processors.
subroutine, public cp_cfm_create(matrix, matrix_struct, name)
Creates a new full matrix with the given structure.
subroutine, public cp_cfm_release(matrix)
Releases a full matrix.
subroutine, public cp_fm_to_cfm(msourcer, msourcei, mtarget)
Construct a complex full matrix by taking its real and imaginary parts from two separate real-value f...
subroutine, public cp_cfm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, matrix_struct, para_env)
Returns information about a full matrix.
subroutine, public cp_cfm_set_all(matrix, alpha, beta)
Set all elements of the full matrix to alpha. Besides, set all diagonal matrix elements to beta (if g...
subroutine, public cp_cfm_to_fm(msource, mtargetr, mtargeti)
Copy real and imaginary parts of a complex full matrix into separate real-value full matrices.
DBCSR operations in CP2K.
subroutine, public copy_dbcsr_to_fm(matrix, fm)
Copy a DBCSR matrix to a BLACS matrix.
represent the structure of a full matrix
subroutine, public cp_fm_struct_create(fmstruct, para_env, context, nrow_global, ncol_global, nrow_block, ncol_block, descriptor, first_p_pos, local_leading_dimension, template_fmstruct, square_blocks, force_block)
allocates and initializes a full matrix structure
subroutine, public cp_fm_struct_release(fmstruct)
releases a full matrix structure
represent a full matrix distributed on many processors
subroutine, public cp_fm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, nrow_locals, ncol_locals, matrix_struct, para_env)
returns all kind of information about the full matrix
subroutine, public cp_fm_to_fm_submat(msource, mtarget, nrow, ncol, s_firstrow, s_firstcol, t_firstrow, t_firstcol)
copy just a part ot the matrix
subroutine, public cp_fm_set_all(matrix, alpha, beta)
set all elements of a matrix to the same value, and optionally the diagonal to a different one
subroutine, public cp_fm_create(matrix, matrix_struct, name, use_sp)
creates a new full matrix with the given structure
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
complex(kind=dp), parameter, public z_one
complex(kind=dp), parameter, public gaussi
complex(kind=dp), parameter, public z_zero
subroutine, public add_dbcsr_submat(cfm_mat_target, mat_source, fm_struct_source, nstart_row, nstart_col, factor, add_also_herm_conj)
...
subroutine, public add_cfm_submat(cfm_mat_target, cfm_mat_source, nstart_row, nstart_col, factor)
...
subroutine, public get_cfm_submat(cfm_mat_target, cfm_mat_source, nstart_row, nstart_col)
...
subroutine, public add_fm_submat(cfm_mat_target, fm_mat_source, nstart_row, nstart_col)
...
subroutine, public cfm_add_on_diag(cfm, alpha)
...
subroutine, public create_cfm_double(fm_orig, cfm_double)
...
Represent a complex full matrix.
keeps the information about the structure of a full matrix