~nickpapior/siesta/trunk-kovalp

« back to all changes in this revision

Viewing changes to Src/siesta_init.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:
 
1
      MODULE m_siesta_init
 
2
      private
 
3
      public :: siesta_init
 
4
 
 
5
      CONTAINS
 
6
 
 
7
      subroutine siesta_init()
 
8
      USE Kpoint_grid, only: setup_Kpoint_grid, gamma_scf, maxk
 
9
      USE Band, only: gamma_bands, setup_bands
 
10
      USE m_ksvinit, only: gamma_polarization, estimate_pol_kpoints
 
11
      USE m_struct_init, only: struct_init
 
12
      USE siesta_options
 
13
      use sparse_matrices
 
14
      use siesta_geom
 
15
      use atomlist, only: no_u, rmaxkb, amass, lasto, qtot, iza, rmaxo,
 
16
     .                    zvaltot, superc, initatomlists, no_l
 
17
      use m_fdf_global, only: fdf_global_get
 
18
      use sys, only: die, bye
 
19
      use xcmod, only: setXC
 
20
      use molecularmechanics, only : inittwobody
 
21
      use metaforce, only: initmeta
 
22
      use m_mpi_utils, only : broadcast
 
23
      use alloc, only: re_alloc, alloc_report
 
24
      use phonon, only: phonon_num_disps, phonon_setup
 
25
      use parallelsubs, only: getnodeorbs
 
26
      use m_iostruct,   only: write_struct, read_struct
 
27
      use zmatrix,      only: lUseZmatrix
 
28
      use zmatrix,      only: write_canonical_ucell_and_Zmatrix
 
29
      use m_check_supercell, only: check_sc_factors
 
30
      use files,       only : slabel
 
31
      use siesta_cmlsubs, only: siesta_cml_init
 
32
      use m_timestamp, only : timestamp
 
33
      use m_wallclock, only : wallclock
 
34
      use parallel, only: Node, Nodes, IOnode
 
35
      USE densematrix, only: Haux, Saux, Psi
 
36
      use m_energies
 
37
      use m_steps
 
38
      use m_spin
 
39
      use m_rmaxh
 
40
      use m_forces 
 
41
      use m_eo
 
42
      use m_gamma
 
43
      use m_ioxv, only: xv_file_read
 
44
      USE writewave, only: gamma_wavefunctions, setup_wf_kpoints
 
45
#ifdef MPI
 
46
      use mpi_siesta, only: mpi_comm_world
 
47
#endif
 
48
 
 
49
      implicit none
 
50
 
 
51
#ifdef MPI
 
52
      integer :: MPIerror  ! Return error code in MPI routines
 
53
#endif
 
54
 
 
55
      real(dp):: veclen     ! Length of a unit-cell vector
 
56
 
 
57
 
 
58
      integer :: i, is, ispin
 
59
      integer :: neigmin     ! Min. number of eigenstates (per k point)
 
60
      integer :: ns          ! Number of species
 
61
 
 
62
      external :: automatic_cell,
 
63
     .  bonds,  fixed,
 
64
     .  dhscf, diagon, dnaefs, extrapol, initatom,
 
65
     .  iodm, iozm,
 
66
     .  kinefsm, mulliken, naefs, pulayx, 
 
67
     .  reinit, shaper, spnvec, 
 
68
     .  timer, xijorb, memory,
 
69
     .  ioeig, iofa, iokp, iomd, prversion, eggbox
 
70
 
 
71
 
 
72
!------------------------------------------------------------------------- BEGIN
 
73
! Initialise MPI and set processor number
 
74
#ifdef MPI
 
75
      call MPI_Init( MPIerror )
 
76
      call MPI_Comm_Rank( MPI_Comm_World, Node, MPIerror )
 
77
      call MPI_Comm_Size( MPI_Comm_World, Nodes, MPIerror )
 
78
#endif
 
79
 
 
80
      IOnode = (Node .eq. 0)
 
81
 
 
82
! Print version information ...........................................
 
83
      if (IOnode) then
 
84
        call prversion()
 
85
#ifdef MPI
 
86
        if (Nodes.gt.1) then
 
87
          write(6,'(/,a,i4,a)')
 
88
     .        '* Running on ', Nodes, ' nodes in parallel'
 
89
        else
 
90
          write(6,'(/,a,i4,a)')
 
91
     .        '* Running in serial mode with MPI'
 
92
        endif
 
93
#else
 
94
        write(6,'(/,a,i4,a)')
 
95
     .        '* Running in serial mode'
 
96
#endif
 
97
         call timestamp('Start of run')
 
98
         call wallclock('Start of run')
 
99
      endif
 
100
! ..................
 
101
 
 
102
! Start time counter ..................................................
 
103
      call timer( 'siesta', 0 )
 
104
      call timer( 'siesta', 1 )
 
105
      call timer( 'Setup', 1 )
 
106
 
 
107
! Nullify arrays
 
108
      nullify(Haux,Saux,psi)
 
109
      nullify(listhptr,listhptrold)
 
110
      nullify(numh,numhold)
 
111
 
 
112
! Initialize some variables
 
113
      DUext = 0.0_dp
 
114
      Eharrs = 0.0_dp
 
115
      Eharrs1 = 0.0_dp
 
116
      Eions = 0.0_dp
 
117
      Ekinion = 0.0_dp
 
118
      Elast = 0.0_dp
 
119
      Emad = 0.0_dp
 
120
      Emeta = 0.0_dp
 
121
      Emm = 0.0_dp
 
122
      Entrop = 0.0_dp
 
123
      Entropy = 0.0_dp
 
124
      FreeE = 0.0_dp
 
125
 
 
126
! Initialise read .....................................................
 
127
      call reinit(sname)
 
128
 
 
129
      call siesta_cml_init() ! Initialize CML (relies on reinit)
 
130
 
 
131
! Set allocation report level .........................................
 
132
      call fdf_global_get(level, 'alloc_report_level', 0 )
 
133
      call alloc_report( level=level, file=trim(slabel)//'.alloc' )
 
134
! ..................
 
135
 
 
136
! Initialise exchange-correlation functional information
 
137
      call setXC()
 
138
 
 
139
! Initialise force field component
 
140
      call inittwobody()
 
141
 
 
142
! Initialize pseudopotentials and atomic orbitals
 
143
      if (IOnode) call initatom(ns)
 
144
      call broadcast(ns)
 
145
      call broadcast_basis()
 
146
 
 
147
      call fdf_global_get(atmonly,'Atom-Setup-Only',.false.)
 
148
      if (atmonly) call bye("End of atom setup")
 
149
 
 
150
! Read geometry
 
151
      call struct_init()      ! Sets na_u, isa, ucell
 
152
 
 
153
! Initialize atom lists
 
154
 
 
155
      call initatomlists()    ! Sets iza
 
156
 
 
157
! early exit if only checking the structure
 
158
 
 
159
      call fdf_global_get(struct_only,'Output-Structure-Only',.false.)
 
160
      if (IONode) then
 
161
         call write_struct( ucell, na_u, isa, iza, xa )
 
162
         if (lUseZmatrix) then
 
163
            call write_canonical_ucell_and_Zmatrix()
 
164
         endif
 
165
      endif
 
166
      if (struct_only) then
 
167
         call bye("End of structure processing")
 
168
      endif
 
169
      
 
170
!  --   End of Initial Structure Processing --
 
171
 
 
172
      if (Node.eq.0) then
 
173
        write(6,'(/,a,20("*"),a,28("*"))')
 
174
     .    'siesta: ', ' Simulation parameters '
 
175
        write(6,'(a)')  'siesta:'
 
176
        write(6,'(a)')  'siesta: The following are some of the '//
 
177
     .                           'parameters of the simulation.'
 
178
        write(6,'(a)')  'siesta: A complete list of the parameters '//
 
179
     .                           'used, including default values,'
 
180
        write(6,'(a,a)')'siesta: can be found in file out.fdf'
 
181
        write(6,'(a)')  'siesta:'
 
182
      endif
 
183
 
 
184
! Allocate other arrays based on read sizes ................
 
185
 
 
186
      nullify(fa,cfa)
 
187
      call re_alloc(fa,1,3,1,na_u,name="fa",
 
188
     $                routine="siesta_init")
 
189
      call re_alloc(cfa,1,3,1,na_u,name="cfa",
 
190
     $                routine="siesta_init")
 
191
 
 
192
      call init_spin()
 
193
 
 
194
! Read simulation data ................................................
 
195
      call read_options( na_u, ns, nspin )
 
196
 
 
197
 
 
198
      qtot = qtot - charnet     ! qtot set in initatomlists
 
199
                                ! charnet set in redata
 
200
      if (IOnode) then
 
201
         write(6,fmt="(a,f12.6)") "Total number of electrons: ", qtot
 
202
         write(6,fmt="(a,f12.6)") "Total ionic charge: ", zvaltot
 
203
      endif
 
204
 
 
205
 
 
206
! Calculate spin populations for fixed spin case...
 
207
      if (fixspin) then
 
208
        if (nspin .ne. 2)
 
209
     $   call die('siesta: ERROR: ' //
 
210
     $        'You can only fix the spin of the system' //
 
211
     $        ' for collinear spin polarized calculations.')
 
212
        do i = 1,2
 
213
          qs(i) = (qtot + (3-2*i)*ts) / 2.0_dp
 
214
        enddo
 
215
      else
 
216
        qs(1:nspin) = 0.0_dp
 
217
        if (nspin .le. 2) then
 
218
          do ispin = 1,nspin
 
219
            qs(ispin) = qtot/nspin
 
220
          enddo
 
221
        endif
 
222
      endif
 
223
! ..................
 
224
 
 
225
! Find maximum interaction range ......................................
 
226
      if (negl) then
 
227
        rmaxh = 2.0_dp*rmaxo
 
228
      else
 
229
        rmaxh = 2.0_dp*rmaxo + 2.0_dp*rmaxkb
 
230
      endif
 
231
! ......................
 
232
 
 
233
! Madelung correction for charged systems .............................
 
234
      if (charnet .ne. 0.0_dp) then
 
235
        call madelung(ucell, shape, charnet, Emad)
 
236
      endif
 
237
 
 
238
! Parallel initialisation
 
239
      call initparallel(no_u,na_u,lasto,xa,ucell,rmaxh,rcoor,isolve)
 
240
      ! if (IOnode) call show_distribution()
 
241
 
 
242
! Find number of locally stored orbitals and allocated related arrays
 
243
      call GetNodeOrbs(no_u,Node,Nodes,no_l)
 
244
 
 
245
! Initialise arrays
 
246
      call re_alloc(listhptr,1,no_l,name='listhptr',routine='siesta',
 
247
     .              copy=.false.)
 
248
      call re_alloc(listhptrold,1,no_l,name='listhptrold',
 
249
     .              routine='siesta',copy=.false.)
 
250
      call re_alloc(numh,1,no_l,name='numh',routine='siesta',
 
251
     .              copy=.false.)
 
252
      call re_alloc(numhold,1,no_l,name='numhold',routine='siesta',
 
253
     .              copy=.false.)
 
254
      listhptr(1:no_l) = 0
 
255
      listhptrold(:) = 0
 
256
      numh(:) = 0
 
257
      numhold(:) = 0
 
258
 
 
259
! Get number of eigenstates that need to be calculated
 
260
 
 
261
      call fdf_global_get(neigwanted,'NumberOfEigenStates',no_u)
 
262
 
 
263
 
 
264
! Check number of eigenstates - cannot be larger than number of
 
265
! basis functions or smaller than number of occupied states + 1
 
266
! so that the Fermi level can be estimated
 
267
      do is = 1,nspin
 
268
        neigmin = nint(qs(is)/real(3 - min(nspin,2), kind=dp)) + 1
 
269
        neigwanted = max(neigwanted,neigmin)
 
270
      enddo
 
271
      neigwanted = min(neigwanted,no_u)
 
272
 
 
273
      ! Find k-grid for Brillouin zone integration 
 
274
      ! NOTE: We need to know whether gamma is .true. or
 
275
      ! not early, in order to decide whether to use an 
 
276
      ! auxiliary supercell for the calculation of matrix elements.
 
277
 
 
278
      call setup_Kpoint_grid( ucell )
 
279
      gamma = gamma_scf
 
280
 
 
281
      nullify(eo,qo)
 
282
      call re_alloc(eo,1,no_u,1,nspin,1,maxk,name="eo",
 
283
     $              routine="state_init")
 
284
      call re_alloc(qo,1,no_u,1,nspin,1,maxk,name="qo",
 
285
     $              routine="state_init")
 
286
 
 
287
      call setup_bands()
 
288
      gamma = gamma .and. gamma_bands
 
289
 
 
290
      call setup_wf_kpoints()
 
291
      gamma = gamma .and. gamma_wavefunctions
 
292
 
 
293
      call estimate_pol_kpoints(ucell)
 
294
      gamma = gamma .and. gamma_polarization
 
295
!!      print *, "gamma, gamma_pol: ", gamma, gamma_polarization
 
296
!
 
297
 
 
298
! Find required supercell
 
299
! 2*rmaxh is used to guarantee that two given orbitals in the
 
300
! supercell can only overlap once
 
301
 
 
302
      if (gamma) then
 
303
         nsc(1:3) = 1
 
304
      else
 
305
         do i=1,3
 
306
            veclen = sqrt(ucell(1,i)**2+ucell(2,i)**2+ucell(3,i)**2)
 
307
            nsc(i) = ceiling( 2 * rmaxh / veclen )
 
308
         enddo
 
309
         if (.not. naiveauxcell)
 
310
     $        call check_sc_factors(ucell,nsc,2*rmaxh)
 
311
      endif
 
312
 
 
313
      mscell = 0.0_dp
 
314
      do i = 1, 3
 
315
         mscell(i,i) = nsc(i)
 
316
         nscold(i) = nsc(i)
 
317
      enddo
 
318
 
 
319
 
 
320
! Find auxiliary supercell (required only for k sampling) ............
 
321
      call superc( ucell, scell, nsc)
 
322
 
 
323
! Initialise metadynamic forces if required
 
324
      call initmeta()
 
325
 
 
326
      if (idyn .eq. 0) then
 
327
        inicoor = 0
 
328
        fincoor = nmove
 
329
      else if (idyn .ge. 1 .and. idyn .le. 5) then
 
330
        inicoor = istart
 
331
        fincoor = ifinal
 
332
      else if (idyn .eq. 6) then
 
333
        inicoor = 0
 
334
        fincoor = (ia2-ia1+1)*3*2
 
335
      else if (idyn .eq. 7) then
 
336
        call phonon_setup()
 
337
        inicoor = 1
 
338
        fincoor = phonon_num_disps
 
339
      else if (idyn .eq. 8) then
 
340
        inicoor = 0
 
341
        fincoor = huge(1)
 
342
      else
 
343
         call die('siesta: wrong idyn')
 
344
      endif
 
345
 
 
346
! Build initial velocities according to Maxwell-Bolzmann distribution....
 
347
      if (idyn .ne. 0 .and. idyn .ne. 6 .and. (.not. xv_file_read)) 
 
348
     .    call vmb(na_u,tempinit,amass,xa,isa,va)
 
349
! ..................
 
350
 
 
351
      istp = 0
 
352
      call timer( 'Setup', 2 )
 
353
 
 
354
! Output memory use before main loop
 
355
      call printmemory( 6, 0 )
 
356
 
 
357
! Initialization now complete. Flush stdout.
 
358
      if (ionode) call pxfflush(6)
 
359
!--------------------------------------------------------------------------- END
 
360
 
 
361
      END subroutine siesta_init
 
362
 
 
363
      End MODULE m_siesta_init