[CP2K:2847] how to output current density

Urban Borštnik urban.b... at gmail.com
Fri Sep 17 07:36:26 UTC 2010


Hello,

>[...]
>   I have figured out a way to build up the density matrix I need. But
> my density matrix is in the form of two dimensional array, i.e.,
> REAL(KIND=dp), DIMENSION(N,N). 

Please have a look at dbcsr_example2.F in the CP2K src/lib directory.
It's a brief example of how to fill in a dbcsr matrix.

It starts with some code on how to initialize/create the matrix; however
at the point in the program where you are working you probably have an
existing density matrix that you can use as a template to create yours.
This way you have the parallel distribution, the atomic row/column block
sizes, ... all set up. Something along the lines of (unchecked code):

        TYPE(dbcsr_obj) :: my_density_matrix
        
        ...
        CALL cp_dbcsr_init (my_density_matrix, error)
        CALL cp_dbcsr_create (my_density_matrix, &
        	name = "My Density Matrix", &
        	matrix_type = dbcsr_type_antisymmetric, &
        	template = existing_density_matrix, &
        	error=error)
        CALL cp_dbcsr_finalize (my_density_matrix)
        
        !Now you fill it in block-by-block
        DO
        	...
        ENDDO
        !End with
        CALL cp_dbcsr_finalize (my_density_matrix)
        ! Call routines with it
        CALL ......
        ! Free it
        CALL cp_dbcsr_release (my_density_matrix)


>   Could you tell me how to convert the 2D array into dbscr_obj matrix
> that is needed by the subroutine "collocate_pgf_product_rspace"?

There is no one-line function to do that. It is possible but I'm
convinced it would be much less painful for you to build the density
matrix as a dbcsr matrix and not as standard 2D array.

Sincerely,
Urban
-- 
Dr. Urban Borštnik <u.bor... at pci.uzh.ch>
Institute of Physical Chemistry, University of Zurich
Winterthurerstrasse 190, 8057 Zurich, Switzerland
tel.: +41 44 635-4498; fax.: +41 44 635 68 38




More information about the CP2K-user mailing list