~albertog/siesta/efield-2.5-jjunquera

« back to all changes in this revision

Viewing changes to Src/atomlist.f

  • Committer: Alberto Garcia
  • Date: 2007-11-21 11:45:49 UTC
  • mfrom: (192.1.67)
  • Revision ID: Arch-1:siesta@uam.es--2006%siesta-devel--reference--2.3--patch-1
Direct merge into master branch of initial BSC changes
The changes along the BSC branches, up to the end of the restructuring
of siesta.F and associated changes, have been merged into a direct
descendant of the main development line. The BSC work originally
started as a branch of siesta-devel--reference--2.1--patch-29. Development
along 2.1 continued, and a new continuation branch 2.3 has been created
specifically for this merge.

Main patches applied:

 * ref@bsc--2007/siesta-bsc--master--2.1--base-0
   tag of siesta@uam.es--2006/siesta-bsc--reference--2.1--patch-7

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-1
   Use of xalast in analysis routines. Exit of geometry loop

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-2
   Creation of a module to hold the siesta options

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-3
   New geometry module

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-4
   New stub module for sparse matrices

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-5
   More options for running tests

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-6
   Encapsulation of k-point handling

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-7
   Initialize iza in struct_init

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-8
   Siesta_todo slimming by M. Quero

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-9
   Fix import of no_l in born_charge

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-10
   Some conversions to Fortran90 by M. Quero

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-11
   Fourth session at the BSC

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-12
   Clarification of the scope of the stress variables

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-13
   Creation of siesta_forces

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-14
   Replacement of some allocatables by pointers and automatics

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-15
   New m_energies and m_steps modules. Back to old k-point behavior

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-16
   Merge of removal of integer and real variables from siesta_todo

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-17
   Fixes for troublesome bugs in reference code

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-18
   Final cleanup of siesta_todo

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-19
   Add character(len=*) routines to alloc.F90

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-20
   Pointers in fixed and setspatial. si2x1h test added to bsc-Makefile

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-21
   Re-organization of pulay module

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-22
   Reorganization of hsparse/xijorb calls with new neighbor module

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-23
   VPATH-aware compilation for multiple executable versions

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-24
   Allocatables to pointers  I

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-25
   Allocatables to pointers  II

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-26
   Allocatables to pointers III

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-27
   Allocatables to pointers IV -- new neighbor code + nspecies fix

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-28
   Explicit array-ness in calls in initatom and cellxc

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-29
   Fix wrong allocations in cellxc.F

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-30
   Explicit array extents in initatom.f

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-31
   Avoid shrinking of density-matrix arrays for extrapol.

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-32
   Fix typo in state_init.F

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-33
   Execute SCF loop when nscf=1

 * ref@bsc--2007/siesta-bsc--master--2.1--patch-34
   Clarify bounds of SCF loop in siesta_forces.

 * ref@bsc--2007/siesta-bsc--master--2.2--base-0
   tag of ref@bsc--2007/siesta-bsc--master--2.1--patch-31

 * ref@bsc--2007/siesta-bsc--master--2.3--base-0
   tag of ref@bsc--2007/siesta-bsc--master--2.2--base-0

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-1
   Prepare CHANGES file

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-2
   Merge patch-log for patch-30 from 2.1

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-3
   New treatment of fractional atoms in VCA. Bug fix in lmxo

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-4
   Re-enabling of kgrid update in variable-cell calculations

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-5
   Fix typo in state_init.F

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-6
   Merge filtering package by Eduardo Anglada

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-7
   Add graphite_c6_full test for more realistic vdW test

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-8
   Add patchlog for k-point fix

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-9
   Fix of zmatrix code to deal with degenerate case

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-10
   Units conversion in Util/Optical/optical.f. Scripts. Cosmetics

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-11
   Implementation of basis_enthalpy calculation. Zmatrix dependency

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-12
   Option to use fractional rc's for multiple zeta

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-13
   Sync vpath changes. Update siesta.tex

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-14
   Fix tag in MPI send/receive in mulliken

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-15
   Option to use fractional rc's for multiple zeta

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-16
   Merge of XML tester by Eduardo Anglada. Portability fixes

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-17
   Fix marenostrum-mpi.make. Syntax in compare_m.f90

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-18
   MareNostrum fixes. zdrot to blas. obj_setup. compare_m syntax

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-19
   Sync to bsc--2.1. Change banner in CHANGES to bsc--2.3

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-20
   Execute SCF loop when nscf=1

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-21
   Refinements of XML tester. New ioncat program

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-22
   Undef var in kgridinit, iohs MPI write, pdosg array bound, Origin shift

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-23
   Zmatrix optimization enhancements. Sign change in MM stress.

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-24
   Clarify bounds of SCF loop in siesta_forces.

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-25
   Avoid MP-grid permutations in trivial gamma case

 * ref@bsc--2007/siesta-bsc--master--2.3--patch-26
   Sync to reference--2.1

 * siesta@uam.es--2006/siesta-bsc--reference--2.1--base-0
   tag of siesta@uam.es--2006/siesta-devel--reference--2.1--patch-29

 * siesta@uam.es--2006/siesta-bsc--reference--2.1--patch-1
   First stage of siesta.F splitting at BSC

 * siesta@uam.es--2006/siesta-bsc--reference--2.1--patch-2
   Created struct_init for initial geometry setup. New test force_2

 * siesta@uam.es--2006/siesta-bsc--reference--2.1--patch-3
   Consolidate geometry updates at the end of loop

 * siesta@uam.es--2006/siesta-bsc--reference--2.1--patch-4
   Initialize vol2 correctly in m_check_supercell.f

 * siesta@uam.es--2006/siesta-bsc--reference--2.1--patch-5
   Kgrid setup streamlined. Bands. Proximity check. Hsparse allocation 

 * siesta@uam.es--2006/siesta-bsc--reference--2.1--patch-6
   Work by Manuel Quero before the meeting on Feb 7th

 * siesta@uam.es--2006/siesta-bsc--reference--2.1--patch-7
   Moved the Born-effective-charge code




Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
      use  atmfuncs, only: nofis, nkbfis, izofis, massfis,
17
17
     $                     rcut, atmpopfio, zvalfis
18
18
      use atm_types, only: species
19
 
 
 
19
      use siesta_geom, only: na_u, na_s, xa, isa, xalast
20
20
      implicit none
21
21
 
 
22
      private
22
23
      public :: initatomlists, superc, superx
23
24
 
24
25
!
25
26
!     Instead of "generic" na, no, and nokb, we use:
26
27
!
27
28
! For "supercell" (intended for k-point calcs)
28
 
      integer, save, public          :: na_s         ! Number of atoms
29
29
      integer, save, public          :: no_s         ! Number of orbitals
30
30
      integer, save, public          :: nokb_s       ! Number of KB projs
31
31
 
32
32
! Same for "unit", or "real" cell:
33
 
      integer, save, public          ::  na_u, no_u, nokb_u
 
33
      integer, save, public          :: no_u, nokb_u
 
34
      integer, save, public          :: no_l=1  !      Local to node
34
35
 
35
36
! Here 'na' is a generic number. It could be na_u or na_s, depending
36
37
! on whether we need a supercell or not.
37
38
 
38
 
C integer isa(na)           : Species index of each atom
39
 
C character cisa(na)        : Reference string for each atom
40
39
C character*2 elem(na)      : Element name of each atom.
41
40
C integer lasto(0:na)       : Position of last orbital of each atom
42
41
C integer lastkb(0:na)      : Position of last KB proj. of each atom
44
43
C real*8 amass(na)          : Atomic mass of each atom
45
44
C real*8 qa(na)             : Neutral atom charge of each atom
46
45
 
47
 
      integer, pointer, save, public  :: isa(:) ! 
48
 
      character(len=11), allocatable, save, public  :: cisa(:) ! 
49
 
! NB cisa is this length in order to contain "siesta:e<isa>"
50
 
! where isa is the siesta element index, and we allow max 999
51
 
! such indices 
52
 
      character(len=2), allocatable, save, public :: elem(:)
 
46
      character(len=2), pointer, save, public :: elem(:)
53
47
! elem will contain element names, so is 2 chars in length
54
48
      integer, pointer, save, public  :: iza(:) ! 
55
49
      integer, pointer, save, public  :: lasto(:) ! 
56
50
      integer, pointer, save, public  :: lastkb(:)
57
51
      real(dp), pointer, save, public  :: amass(:), qa(:)
58
52
 
59
 
      real(dp), pointer, save, public  :: xa(:,:)
60
 
!        Atomic coordinates
61
 
      real(dp), pointer, save, public  :: xalast(:,:)
62
 
!        Atomic coordinates (it doesn't really belong here)
63
53
 
64
54
      integer, pointer, save, public           :: indxua(:)
65
55
!        Index of equivalent atom in "u" cell
92
82
      real(dp), pointer, save, public   :: rckb(:)
93
83
!         Cutoff radius of each KB projector
94
84
!
95
 
      private
96
85
 
97
86
      CONTAINS
98
87
 
99
 
!----------------------------------------------------------------------
100
 
      subroutine initatomlists
 
88
!=======================================================
 
89
      subroutine initatomlists()
101
90
 
102
91
C Routine to initialize the atomic lists.
103
92
C
104
 
 
105
93
      integer  ia, io, is, nkba, noa, nol, nokbl, ioa, ikb
 
94
 
 
95
      nullify(indxua,lastkb,lasto,qa,amass,xalast)
 
96
      call re_alloc(indxua,1,na_u,name='indxua',routine='siesta')
 
97
      call re_alloc(lastkb,0,na_u,name='lastkb',routine='siesta')
 
98
      call re_alloc(lasto,0,na_u,name='lasto',routine='siesta')
 
99
      call re_alloc(qa,1,na_u,name='qa',routine='siesta')
 
100
      call re_alloc(xalast,1,3,1,na_u,name='xalast',routine='siesta')
 
101
      call re_alloc(amass,1,na_u,name='amass',routine='siesta')
 
102
 
106
103
!
107
104
!     Find number of orbitals and KB projectors in cell
108
105
!
191
188
     $     na_u, no_u, nokb_u
192
189
 
193
190
      end subroutine initatomlists
194
 
!----------------------------------------------------------------------
 
191
 
195
192
 
196
193
      subroutine superc( ucell, scell, nsc)
197
194