Hi Peter,

When I tried to compile your code using fortran compiler
following error appeared:

*HSX.f95:6.15:

  use modul_log
               1
Fatal Error: Can't open module file 'modul_log.mod' for reading at (1): No
such file or directory
*
I can't find in siesta code such a module.
I also thought that maybe the name was changed, but I can't find any similar
one.
Can you help me with that?

Best Regards,

Magda




2010/3/13 Peter Koval <koval.pe...@googlemail.com>

> Hello Doron!
>
> I think you can use my program for this, although it is not perfect. The
> program reads the .HSX file. At least one thing must be obviously corrected
> in the program: the row and columns are interchanged, therefore it might be
> necessary to interchange them in periodic systems.
>
> Best regards,
>
> Peter
>
> !!
> !!
> !!
> subroutine import_hsx(fname, haux, saux, iv)
>   use modul_log
>   use modul_precision
>   use modul_orbital_vars, only : norbitals, nspin, orb_occ, Temp,
> total_electronic_charge
>   !! external
>   character(len=*), intent(in) :: fname
>   real(dp) :: haux(norbitals, norbitals, nspin), saux(norbitals,
> norbitals);
>   integer, intent(in)   :: iv
>
>   !! internal
>   integer, allocatable  ::  int_buff(:)   !! buffer for pointers (to
> nonzero elements) within a column
>   real(sp), allocatable  :: sp_buff(:)    !! buffer for vector values (of
> nonzero elements) within a column
>   integer :: ifile, iostat, icol, i, ispin, sum_col2nnzero, maxnnzero
>   integer(4) :: norbitals_in, norbitals_in_supercell, nspin_in
>   logical(4) :: gamma                          ! Gamma point or not
>
>   ifile = get_free_handle();
>
> open(ifile,file=trim(fname),form='unformatted',action='read',status='old',iostat=iostat);
>   if(iostat/=0) then; write(ilog,*)'import_hsx: error: file ', trim(fname),
> " ?"; stop; endif;
>   rewind(ifile)
>   read(ifile,iostat=iostat) norbitals_in, norbitals_in_supercell, nspin_in,
> nnonzero
>   if (norbitals /= norbitals_in) then
>     write(ilog,*)norbitals_in, norbitals_in_supercell, nspin_in, nnonzero
>     write(ilog,*)"import_hsx: norbitals, norbitals_in:", norbitals,
> norbitals_in
>     stop "import_hsx: (norbitals /= norbitals_in)"
>   endif
>   if (nspin_in /= nspin) then
>     write(ilog,*) "import_hsx: nspin, nspin_in:", nspin, nspin_in
>     stop "import_hsx: (nspin /= nspin_in)"
>   endif
>   if (nspin==1) then; orb_occ=2;
> else if (nspin==2) then; orb_occ=1;
> else; write(ilog,*)'import_hsx: nspin', nspin; stop '(nspin/=1 .and.
> nspin/=2)'; endif
>
>   if(iv>1) write(ilog,*) "import_hsx: norbitals_in, norbitals_in_supercell,
> nspin_in, nnonzero"
>   if(iv>1) write(ilog,*) norbitals_in, norbitals_in_supercell, nspin_in,
> nnonzero
>
>   read(ifile,iostat=iostat) gamma
>   if (.not. gamma)stop "import_hsx: .not. gamma";
>
>   !! allocate the buffers
>   allocate(col2nnzero(norbitals), col2displ(norbitals),
> sparse_ind2row(nnonzero))
>   allocate(H_sparse(nnonzero,nspin), stat=iostat); ! Hamiltonian matrix in
> packed form
>   allocate(S_sparse(nnonzero),       stat=iostat); ! Overlap matrix in
> packed form
>
>   read(ifile,iostat=iostat)col2nnzero
>   sum_col2nnzero = sum(col2nnzero)
>   if (sum_col2nnzero > nnonzero) then
>     write(ilog,*) 'import_hsx: sum_col2nnzero > nnonzero ', sum_col2nnzero,
> nnonzero;
>     write(ilog,*) col2nnzero;
>     stop 'import_hsx:';
>   endif
>
>   maxnnzero = maxval(col2nnzero)
>   allocate(int_buff(maxnnzero), sp_buff(maxnnzero));
>
>   !! Fill the displacements (according to col2nnzero) col2displ
>   col2displ(1)=0
>   do icol=2, norbitals
>     col2displ(icol) = col2displ(icol-1) + col2nnzero(icol-1)
>   enddo
>
>   !! Fill the rows for each index in *_sparse arrays
>   do icol=1, norbitals
>     read(ifile,iostat=iostat)int_buff(1:col2nnzero(icol)) ! read set of
> rows where nonzero elements reside
>     if (iostat/=0) stop "import_hsx: (iostat/=0) int_buff"
>
>     do i=1, col2nnzero(icol)
>       sparse_ind2row(col2displ(icol)+i) = int_buff(i)
>     enddo
>   enddo
>
>   !! Read the data to H_sparse array
>   do ispin=1,nspin
>     do icol=1,norbitals
>       read(ifile,iostat=iostat)sp_buff(1:col2nnzero(icol))
>       if (iostat /= 0) stop "import_hsx: (iostat/=0) Hamiltonian matrix"
>       do i=1,col2nnzero(icol); H_sparse(col2displ(icol)+i, ispin) =
> sp_buff(i); enddo;
>     enddo
>   enddo
>
>   !! Read the data to S_sparse array
>   do icol=1,norbitals
>     read(ifile,iostat=iostat)sp_buff(1:col2nnzero(icol))
>     if (iostat /= 0) stop "import_hsx: (iostat/=0) overlap matrix"
>     do i=1,col2nnzero(icol); S_sparse(col2displ(icol)+i) = sp_buff(i);
> enddo
>   enddo
>
>   do ispin=1, nspin
>     call sparse2full(norbitals, Haux(:,:,ispin), H_sparse(:,ispin),
> col2nnzero, col2displ, sparse_ind2row);
>     if(ispin==1) &
>     call sparse2full(norbitals, Saux, S_sparse(:), col2nnzero, col2displ,
> sparse_ind2row);
>   enddo
>
>   read(ifile,iostat=iostat) total_electronic_charge, Temp  ! Total
> electronic charge and Temperature
>   if(iv>0)write(ilog,*) "import_hsx: total_electronic_charge, Temp (Ry):",
> real(total_electronic_charge,4), real(Temp,4)
>   deallocate(int_buff, sp_buff);
>   close(ifile);
>
> end subroutine !import_hsx
>
> !!
> !!
> !!
> subroutine sparse2full(ndim, M_full, M_sparse, col2nnzero, col2displ,
> sparse_ind2row)
>   use modul_precision
>   !! external
>   integer(4), intent(in) :: ndim
>   real(dp), intent(out)  :: M_full(ndim,ndim)
>   real(dp), intent(in)   :: M_sparse(:)
>   integer(4), intent(in) :: col2nnzero(ndim), col2displ(ndim),
> sparse_ind2row(:)
>
>   !! internal
>   integer :: icol, i, irow, sparse_ind
>
>   do icol=1,ndim
>     do i=1,col2nnzero(icol);
>       sparse_ind = col2displ(icol)+i;
>       irow = sparse_ind2row(sparse_ind);
>       M_full(irow, icol) = M_sparse(sparse_ind)
>     enddo
>   enddo
>
> end subroutine !sparse2full
>
>
>
> On Fri, Mar 12, 2010 at 7:41 PM, Doron Naveh <na...@cmu.edu> wrote:
>
>> Hi,
>> I'm trying to obtain the overlap matrix of basis set functions,
>> does anyone know how?
>> Thanks,
>> Doron.
>>
>>
>
>
> --
> Dr. Peter Koval
> email: koval.pe...@gmail.com
> inet: http://sites.google.com/site/kovalpeter/
>

Responder a