33#include "../base/base_uses.f90"
39 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'arnoldi_methods'
58 CHARACTER(LEN=*),
PARAMETER :: routinen =
'arnoldi_iram'
60 COMPLEX(dp),
ALLOCATABLE,
DIMENSION(:) :: tau, work, work_measure
61 COMPLEX(dp),
ALLOCATABLE,
DIMENSION(:, :) :: q, safe_mat, tmp_mat, tmp_mat1
62 INTEGER :: handle, i, info, j, lwork, msize, nwant
63 REAL(kind=
dp) :: beta, sigma
64 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: qdata
68 CALL timeset(routinen, handle)
73 msize = control%current_step
74 nwant = control%nval_out
75 ALLOCATE (tmp_mat(msize, msize));
ALLOCATE (safe_mat(msize, msize))
76 ALLOCATE (q(msize, msize));
ALLOCATE (tmp_mat1(msize, msize))
77 ALLOCATE (work_measure(1))
78 ALLOCATE (tau(msize));
ALLOCATE (qdata(msize, msize))
80 q = cmplx(0.0, 0.0,
dp)
82 q(i, i) = cmplx(1.0, 0.0,
dp)
86 tmp_mat(:, :) = cmplx(ar_data%Hessenberg(1:msize, 1:msize), 0.0, kind=
dp)
87 safe_mat(:, :) = tmp_mat(:, :)
91 IF (any(control%selected_ind == i)) cycle
94 tmp_mat(j, j) = tmp_mat(j, j) - ar_data%evals(i)
98 CALL zgeqrf(msize, msize, tmp_mat, msize, tau, work_measure, lwork, info)
99 lwork = int(work_measure(1))
100 IF (
ALLOCATED(work))
THEN
101 IF (
SIZE(work) .LT. lwork)
THEN
105 IF (.NOT.
ALLOCATED(work))
ALLOCATE (work(lwork))
106 CALL zgeqrf(msize, msize, tmp_mat, msize, tau, work, lwork, info)
108 CALL zungqr(msize, msize, msize, tmp_mat, msize, tau, work, lwork, info)
110 tmp_mat1(:, :) = q(:, :)
111 CALL zgemm(
'N',
'N', msize, msize, msize, cmplx(1.0, 0.0,
dp), tmp_mat1, &
112 msize, tmp_mat, msize, cmplx(0.0, 0.0,
dp), q, msize)
114 CALL zgemm(
'C',
'N', msize, msize, msize, cmplx(1.0, 0.0,
dp), tmp_mat, &
115 msize, safe_mat, msize, cmplx(0.0, 0.0,
dp), tmp_mat1, msize)
116 CALL zgemm(
'N',
'N', msize, msize, msize, cmplx(1.0, 0.0,
dp), tmp_mat1, &
117 msize, tmp_mat, msize, cmplx(0.0, 0.0,
dp), safe_mat, msize)
121 safe_mat(j + 2:msize, j) = cmplx(0.0, 0.0,
dp)
123 tmp_mat(:, :) = safe_mat(:, :)
127 ar_data%Hessenberg = 0.0_dp
128 ar_data%Hessenberg(1:msize, 1:msize) = real(safe_mat, kind=
dp)
129 qdata(:, :) = real(q(:, :), kind=
dp)
131 beta = ar_data%Hessenberg(nwant + 1, nwant); sigma = qdata(msize, nwant)
134 IF (control%local_comp)
THEN
135 ar_data%f_vec = matmul(ar_data%local_history(:, 1:msize), qdata(1:msize, nwant + 1))*beta + ar_data%f_vec(:)*sigma
136 ar_data%local_history(:, 1:nwant) = matmul(ar_data%local_history(:, 1:msize), qdata(1:msize, 1:nwant))
139 control%current_step = nwant
141 DEALLOCATE (tmp_mat, safe_mat, q, qdata, tmp_mat1, work, tau, work_measure)
142 CALL timestop(handle)
155 CHARACTER(LEN=*),
PARAMETER :: routinen =
'compute_evals'
157 COMPLEX(dp),
ALLOCATABLE,
DIMENSION(:, :) :: levec
158 INTEGER :: handle, ndim
162 CALL timeset(routinen, handle)
166 ndim = control%current_step
167 ALLOCATE (levec(ndim, ndim))
171 IF (control%generalized_ev)
THEN
173 ar_data%evals(1:ndim), ar_data%revec(1:ndim, 1:ndim))
175 IF (control%symmetric)
THEN
177 ar_data%evals(1:ndim), ar_data%revec(1:ndim, 1:ndim), levec)
180 ar_data%evals(1:ndim), ar_data%revec(1:ndim, 1:ndim), levec)
185 CALL timestop(handle)
202 CHARACTER(LEN=*),
PARAMETER :: routinen =
'arnoldi_init'
204 INTEGER :: col, col_size, handle, i, iseed(4), &
205 ncol_local, nrow_local, row, row_size
206 LOGICAL :: local_comp
208 REAL(kind=
dp) :: norm
209 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: v_vec, w_vec
210 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: data_block
216 CALL timeset(routinen, handle)
219 pcol_group = control%pcol_group
220 local_comp = control%local_comp
225 CALL dbcsr_get_info(matrix=vectors%input_vec, nfullrows_local=nrow_local, nfullcols_local=ncol_local)
226 ALLOCATE (v_vec(nrow_local))
227 ALLOCATE (w_vec(nrow_local))
228 v_vec = 0.0_dp; w_vec = 0.0_dp
229 ar_data%Hessenberg = 0.0_dp
231 IF (control%has_initial_vector)
THEN
233 CALL transfer_local_array_to_dbcsr(vectors%input_vec, ar_data%f_vec, nrow_local, control%local_comp)
239 iseed(1) = 2; iseed(2) = mod(row, 4095); iseed(3) = mod(col, 4095); iseed(4) = 11
240 CALL dlarnv(2, iseed, row_size*col_size, data_block)
245 CALL transfer_dbcsr_to_local_array(vectors%input_vec, v_vec, nrow_local, control%local_comp)
248 CALL compute_norms(v_vec, norm, rnorm, control%pcol_group)
250 IF (rnorm == 0) rnorm = 1
254 CALL transfer_dbcsr_to_local_array(vectors%input_vec, v_vec, nrow_local, control%local_comp)
257 DO i = 1,
SIZE(matrix)
259 0.0_dp, vectors%rep_row_vec, vectors%rep_col_vec)
260 CALL dbcsr_copy(vectors%input_vec, vectors%result_vec)
263 CALL transfer_dbcsr_to_local_array(vectors%result_vec, w_vec, nrow_local, control%local_comp)
266 ar_data%Hessenberg(1, 1) = dot_product(v_vec, w_vec)
267 CALL pcol_group%sum(ar_data%Hessenberg(1, 1))
268 ar_data%f_vec = w_vec - v_vec*ar_data%Hessenberg(1, 1)
270 ar_data%local_history(:, 1) = v_vec(:)
273 control%current_step = 1
275 DEALLOCATE (v_vec, w_vec)
276 CALL timestop(handle)
289 TYPE(
dbcsr_p_type),
DIMENSION(:) :: matrix, matrix_arnoldi
293 CHARACTER(LEN=*),
PARAMETER :: routinen =
'gev_arnoldi_init'
295 INTEGER :: col, col_size, handle, iseed(4), &
296 ncol_local, nrow_local, row, row_size
297 LOGICAL :: local_comp
299 REAL(kind=
dp) :: denom, norm
300 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: v_vec, w_vec
301 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: data_block
307 CALL timeset(routinen, handle)
310 pcol_group = control%pcol_group
311 local_comp = control%local_comp
316 CALL dbcsr_get_info(matrix=vectors%input_vec, nfullrows_local=nrow_local, nfullcols_local=ncol_local)
317 ALLOCATE (v_vec(nrow_local))
318 ALLOCATE (w_vec(nrow_local))
319 v_vec = 0.0_dp; w_vec = 0.0_dp
320 ar_data%Hessenberg = 0.0_dp
322 IF (control%has_initial_vector)
THEN
324 CALL transfer_local_array_to_dbcsr(vectors%input_vec, ar_data%f_vec, nrow_local, control%local_comp)
330 iseed(1) = 2; iseed(2) = mod(row, 4095); iseed(3) = mod(col, 4095); iseed(4) = 11
331 CALL dlarnv(2, iseed, row_size*col_size, data_block)
336 CALL transfer_dbcsr_to_local_array(vectors%input_vec, v_vec, nrow_local, control%local_comp)
339 CALL compute_norms(v_vec, norm, rnorm, control%pcol_group)
341 IF (rnorm == 0) rnorm = 1
345 0.0_dp, vectors%rep_row_vec, vectors%rep_col_vec)
347 CALL transfer_dbcsr_to_local_array(vectors%result_vec, w_vec, nrow_local, control%local_comp)
349 ar_data%rho_scale = 0.0_dp
350 ar_data%rho_scale = dot_product(v_vec, w_vec)
351 CALL pcol_group%sum(ar_data%rho_scale)
354 0.0_dp, vectors%rep_row_vec, vectors%rep_col_vec)
356 CALL transfer_dbcsr_to_local_array(vectors%result_vec, w_vec, nrow_local, control%local_comp)
359 denom = dot_product(v_vec, w_vec)
360 CALL pcol_group%sum(denom)
361 IF (control%myproc == 0) ar_data%rho_scale = ar_data%rho_scale/denom
362 CALL control%mp_group%bcast(ar_data%rho_scale, 0)
365 CALL dbcsr_copy(matrix_arnoldi(1)%matrix, matrix(1)%matrix)
366 CALL dbcsr_add(matrix_arnoldi(1)%matrix, matrix(2)%matrix, 1.0_dp, -ar_data%rho_scale)
368 ar_data%x_vec = v_vec
370 CALL timestop(handle)
389 CHARACTER(LEN=*),
PARAMETER :: routinen =
'build_subspace'
391 INTEGER :: handle, i, j, ncol_local, nrow_local
393 REAL(kind=
dp) :: norm
394 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: h_vec, s_vec, v_vec, w_vec
397 TYPE(
dbcsr_type),
POINTER :: input_vec, result_vec, swap_vec
399 CALL timeset(routinen, handle)
403 control%converged = .false.
406 CALL dbcsr_get_info(matrix=vectors%input_vec, nfullrows_local=nrow_local, nfullcols_local=ncol_local)
407 ALLOCATE (v_vec(nrow_local));
ALLOCATE (w_vec(nrow_local))
408 v_vec = 0.0_dp; w_vec = 0.0_dp
409 ALLOCATE (s_vec(control%max_iter));
ALLOCATE (h_vec(control%max_iter))
411 DO j = control%current_step, control%max_iter - 1
414 CALL compute_norms(ar_data%f_vec, norm, rnorm, control%pcol_group)
417 IF (control%myproc == 0) control%converged = rnorm .LT. real(control%threshold,
dp)
418 CALL control%mp_group%bcast(control%converged, 0)
419 IF (control%converged)
EXIT
422 IF (rnorm == 0) rnorm = 1
423 v_vec(:) = ar_data%f_vec(:)/rnorm; ar_data%local_history(:, j + 1) = v_vec(:); ar_data%Hessenberg(j + 1, j) = norm
425 input_vec => vectors%input_vec
426 result_vec => vectors%result_vec
427 CALL transfer_local_array_to_dbcsr(input_vec, v_vec, nrow_local, control%local_comp)
430 DO i = 1,
SIZE(matrix)
432 0.0_dp, vectors%rep_row_vec, vectors%rep_col_vec)
433 swap_vec => input_vec
434 input_vec => result_vec
435 result_vec => swap_vec
438 CALL transfer_dbcsr_to_local_array(input_vec, w_vec, nrow_local, control%local_comp)
441 CALL gram_schmidt_ortho(h_vec, ar_data%f_vec, s_vec, w_vec, nrow_local, j + 1, &
442 ar_data%local_history, ar_data%local_history, control%local_comp, control%pcol_group)
446 CALL dgks_ortho(h_vec, ar_data%f_vec, s_vec, nrow_local, j + 1, ar_data%local_history, &
447 ar_data%local_history, control%local_comp, control%pcol_group)
449 ar_data%Hessenberg(1:j + 1, j + 1) = h_vec(1:j + 1)
450 control%current_step = j + 1
454 CALL compute_norms(ar_data%f_vec, norm, rnorm, control%pcol_group)
455 ar_data%Hessenberg(control%current_step + 1, control%current_step) = norm
458 CALL control%mp_group%bcast(ar_data%Hessenberg, 0)
460 DEALLOCATE (v_vec, w_vec, h_vec, s_vec)
461 CALL timestop(handle)
479 CHARACTER(LEN=*),
PARAMETER :: routinen =
'gev_build_subspace'
481 INTEGER :: handle, j, ncol_local, nrow_local
482 REAL(kind=
dp) :: norm
483 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: h_vec, s_vec, v_vec, w_vec
484 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: bzmat, czmat, zmat
489 CALL timeset(routinen, handle)
493 control%converged = .false.
494 pcol_group = control%pcol_group
497 CALL dbcsr_get_info(matrix=vectors%input_vec, nfullrows_local=nrow_local, nfullcols_local=ncol_local)
498 ALLOCATE (v_vec(nrow_local));
ALLOCATE (w_vec(nrow_local))
499 v_vec = 0.0_dp; w_vec = 0.0_dp
500 ALLOCATE (s_vec(control%max_iter));
ALLOCATE (h_vec(control%max_iter))
501 ALLOCATE (zmat(nrow_local, control%max_iter));
ALLOCATE (czmat(nrow_local, control%max_iter))
502 ALLOCATE (bzmat(nrow_local, control%max_iter))
504 CALL transfer_local_array_to_dbcsr(vectors%input_vec, ar_data%x_vec, nrow_local, control%local_comp)
506 0.0_dp, vectors%rep_row_vec, vectors%rep_col_vec)
507 CALL transfer_dbcsr_to_local_array(vectors%result_vec, bzmat(:, 1), nrow_local, control%local_comp)
510 norm = dot_product(ar_data%x_vec, bzmat(:, 1))
511 CALL pcol_group%sum(norm)
512 IF (control%local_comp)
THEN
513 zmat(:, 1) = ar_data%x_vec/sqrt(norm); bzmat(:, 1) = bzmat(:, 1)/sqrt(norm)
516 DO j = 1, control%max_iter
517 control%current_step = j
518 CALL transfer_local_array_to_dbcsr(vectors%input_vec, zmat(:, j), nrow_local, control%local_comp)
520 0.0_dp, vectors%rep_row_vec, vectors%rep_col_vec)
521 CALL transfer_dbcsr_to_local_array(vectors%result_vec, czmat(:, j), nrow_local, control%local_comp)
522 w_vec(:) = czmat(:, j)
525 CALL gram_schmidt_ortho(h_vec, ar_data%f_vec, s_vec, w_vec, nrow_local, j, &
526 bzmat, zmat, control%local_comp, control%pcol_group)
530 CALL dgks_ortho(h_vec, ar_data%f_vec, s_vec, nrow_local, j, bzmat, &
531 zmat, control%local_comp, control%pcol_group)
533 CALL transfer_local_array_to_dbcsr(vectors%input_vec, ar_data%f_vec, nrow_local, control%local_comp)
535 0.0_dp, vectors%rep_row_vec, vectors%rep_col_vec)
536 CALL transfer_dbcsr_to_local_array(vectors%result_vec, v_vec, nrow_local, control%local_comp)
538 norm = dot_product(ar_data%f_vec, v_vec)
539 CALL pcol_group%sum(norm)
541 IF (control%myproc == 0) control%converged = real(norm,
dp) .LT. epsilon(real(1.0,
dp))
542 CALL control%mp_group%bcast(control%converged, 0)
543 IF (control%converged)
EXIT
544 IF (j == control%max_iter - 1)
EXIT
546 IF (control%local_comp)
THEN
547 zmat(:, j + 1) = ar_data%f_vec/sqrt(norm); bzmat(:, j + 1) = v_vec(:)/sqrt(norm)
554 ar_data%Hessenberg = 0.0_dp
555 IF (control%local_comp)
THEN
556 ar_data%Hessenberg(1:control%current_step, 1:control%current_step) = &
557 matmul(transpose(czmat(:, 1:control%current_step)), zmat(:, 1:control%current_step))
559 CALL control%mp_group%sum(ar_data%Hessenberg)
561 ar_data%local_history = zmat
564 DEALLOCATE (v_vec);
DEALLOCATE (w_vec);
DEALLOCATE (s_vec);
DEALLOCATE (h_vec);
DEALLOCATE (czmat);
565 DEALLOCATE (zmat);
DEALLOCATE (bzmat)
567 CALL timestop(handle)
585 TYPE(
dbcsr_p_type),
DIMENSION(:) :: matrix, matrix_arnoldi
589 CHARACTER(LEN=*),
PARAMETER :: routinen =
'gev_update_data'
592 INTEGER :: handle, i, ind, ncol_local, nrow_local
594 REAL(kind=
dp) :: norm
595 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: v_vec
599 CALL timeset(routinen, handle)
606 val = ar_data%evals(control%selected_ind(1))
607 ar_data%rho_scale = ar_data%rho_scale + real(val,
dp)
609 ar_data%x_vec = 0.0_dp
610 DO i = 1, control%current_step
611 val = ar_data%revec(i, control%selected_ind(1))
612 ar_data%x_vec(:) = ar_data%x_vec(:) + ar_data%local_history(:, i)*real(val,
dp)
618 CALL dbcsr_copy(matrix_arnoldi(1)%matrix, matrix(1)%matrix)
619 CALL dbcsr_add(matrix_arnoldi(1)%matrix, matrix(2)%matrix, 1.0_dp, -ar_data%rho_scale)
622 CALL dbcsr_get_info(matrix=vectors%input_vec, nfullrows_local=nrow_local, nfullcols_local=ncol_local)
623 IF (ncol_local > 0)
THEN
624 ALLOCATE (v_vec(nrow_local))
625 CALL compute_norms(ar_data%x_vec, norm, rnorm, control%pcol_group)
626 v_vec(:) = ar_data%x_vec(:)/rnorm
628 CALL transfer_local_array_to_dbcsr(vectors%input_vec, v_vec, nrow_local, control%local_comp)
630 0.0_dp, vectors%rep_row_vec, vectors%rep_col_vec)
631 CALL transfer_dbcsr_to_local_array(vectors%result_vec, v_vec, nrow_local, control%local_comp)
632 IF (ncol_local > 0)
THEN
633 CALL compute_norms(v_vec, norm, rnorm, control%pcol_group)
635 control%converged = rnorm .LT. control%threshold
639 CALL control%mp_group%bcast(control%converged, 0)
640 ind = control%selected_ind(1)
641 CALL control%mp_group%bcast(ar_data%rho_scale, 0)
644 ar_data%evals(ind) = ar_data%rho_scale
646 CALL timestop(handle)
657 SUBROUTINE transfer_dbcsr_to_local_array(vec, array, n, is_local)
659 REAL(kind=
dp),
DIMENSION(:) :: array
663 REAL(kind=
dp),
DIMENSION(:),
POINTER :: data_vec
666 IF (is_local) array(1:n) = data_vec(1:n)
668 END SUBROUTINE transfer_dbcsr_to_local_array
677 SUBROUTINE transfer_local_array_to_dbcsr(vec, array, n, is_local)
679 REAL(kind=
dp),
DIMENSION(:) :: array
683 REAL(kind=
dp),
DIMENSION(:),
POINTER :: data_vec
686 IF (is_local) data_vec(1:n) = array(1:n)
688 END SUBROUTINE transfer_local_array_to_dbcsr
703 SUBROUTINE gram_schmidt_ortho(h_vec, f_vec, s_vec, w_vec, nrow_local, &
704 j, local_history, reorth_mat, local_comp, pcol_group)
705 REAL(kind=
dp),
DIMENSION(:) :: h_vec, f_vec, s_vec, w_vec
706 INTEGER :: nrow_local, j
707 REAL(kind=
dp),
DIMENSION(:, :) :: local_history, reorth_mat
708 LOGICAL :: local_comp
711 CHARACTER(LEN=*),
PARAMETER :: routinen =
'Gram_Schmidt_ortho'
715 CALL timeset(routinen, handle)
718 h_vec = 0.0_dp; f_vec = 0.0_dp; s_vec = 0.0_dp
719 IF (local_comp)
CALL dgemv(
'T', nrow_local, j, 1.0_dp, local_history, &
720 nrow_local, w_vec, 1, 0.0_dp, h_vec, 1)
721 CALL pcol_group%sum(h_vec(1:j))
723 IF (local_comp)
CALL dgemv(
'N', nrow_local, j, 1.0_dp, reorth_mat, &
724 nrow_local, h_vec, 1, 0.0_dp, f_vec, 1)
725 f_vec(:) = w_vec(:) - f_vec(:)
727 CALL timestop(handle)
729 END SUBROUTINE gram_schmidt_ortho
743 SUBROUTINE dgks_ortho(h_vec, f_vec, s_vec, nrow_local, j, &
744 local_history, reorth_mat, local_comp, pcol_group)
745 REAL(kind=
dp),
DIMENSION(:) :: h_vec, f_vec, s_vec
746 INTEGER :: nrow_local, j
747 REAL(kind=
dp),
DIMENSION(:, :) :: local_history, reorth_mat
748 LOGICAL :: local_comp
751 CHARACTER(LEN=*),
PARAMETER :: routinen =
'DGKS_ortho'
755 CALL timeset(routinen, handle)
757 IF (local_comp)
CALL dgemv(
'T', nrow_local, j, 1.0_dp, local_history, &
758 nrow_local, f_vec, 1, 0.0_dp, s_vec, 1)
759 CALL pcol_group%sum(s_vec(1:j))
760 IF (local_comp)
CALL dgemv(
'N', nrow_local, j, -1.0_dp, reorth_mat, &
761 nrow_local, s_vec, 1, 1.0_dp, f_vec, 1)
762 h_vec(1:j) = h_vec(1:j) + s_vec(1:j)
764 CALL timestop(handle)
766 END SUBROUTINE dgks_ortho
776 SUBROUTINE compute_norms(vec, norm, rnorm, pcol_group)
777 REAL(kind=
dp),
DIMENSION(:) :: vec
778 REAL(kind=
dp) :: norm
783 norm = dot_product(vec, vec)
784 CALL pcol_group%sum(norm)
785 rnorm = sqrt(real(norm,
dp))
788 END SUBROUTINE compute_norms
provides a unified interface to lapack geev routines
subroutine, public arnoldi_general_local_diag(jobvl, jobvr, matrix, ndim, evals, revec, levec)
...
subroutine, public arnoldi_symm_local_diag(jobvr, matrix, ndim, evals, revec)
...
subroutine, public arnoldi_tridiag_local_diag(jobvl, jobvr, matrix, ndim, evals, revec, levec)
...
methods for arnoldi iteration
subroutine, public compute_evals(arnoldi_env)
Call the correct eigensolver, in the arnoldi method only the right eigenvectors are used....
subroutine, public arnoldi_init(matrix, vectors, arnoldi_env)
Interface for the initialization of the arnoldi subspace creation currently it can only setup a rando...
subroutine, public arnoldi_iram(arnoldi_env)
Alogorithm for the implicit restarts in the arnoldi method this is an early implementation which scal...
subroutine, public gev_build_subspace(matrix, vectors, arnoldi_env)
builds the basis rothogonal wrt. the metric. The structure looks similar to normal arnoldi but norms,...
subroutine, public gev_update_data(matrix, matrix_arnoldi, vectors, arnoldi_env)
Updates all data after an inner loop of the generalized ev arnoldi. Updates rho and C=A-rho*B accordi...
subroutine, public gev_arnoldi_init(matrix, matrix_arnoldi, vectors, arnoldi_env)
Computes the initial guess for the solution of the generalized eigenvalue using the arnoldi method.
subroutine, public build_subspace(matrix, vectors, arnoldi_env)
Here we create the Krylov subspace and fill the Hessenberg matrix convergence check is only performed...
collection of types used in arnoldi
type(arnoldi_data_type) function, pointer, public get_data(arnoldi_env)
...
type(arnoldi_control_type) function, pointer, public get_control(arnoldi_env)
...
operations for skinny matrices/vectors expressed in dbcsr form
subroutine, public dbcsr_matrix_colvec_multiply(matrix, vec_in, vec_out, alpha, beta, work_row, work_col)
the real driver routine for the multiply, not all symmetries implemented yet
subroutine, public dbcsr_scale(matrix, alpha_scalar)
...
subroutine, public dbcsr_iterator_next_block(iterator, row, column, block, block_number_argument_has_been_removed, row_size, col_size, row_offset, col_offset)
...
logical function, public dbcsr_iterator_blocks_left(iterator)
...
subroutine, public dbcsr_iterator_stop(iterator)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, my_prow, my_pcol, local_rows, local_cols, proc_row_dist, proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, matrix_type, group)
...
real(kind=dp) function, dimension(:), pointer, public dbcsr_get_data_p(matrix, lb, ub)
...
subroutine, public dbcsr_iterator_start(iterator, matrix, shared, dynamic, dynamic_byrows)
...
subroutine, public dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
...
Defines the basic variable types.
integer, parameter, public dp
Interface to the message passing library MPI.