Merge lp:~nickpapior/siesta/tddft-work into lp:~rraffiu/siesta/tddft02-format0.92

Proposed by Nick Papior
Status: Merged
Merged at revision: 651
Proposed branch: lp:~nickpapior/siesta/tddft-work
Merge into: lp:~rraffiu/siesta/tddft02-format0.92
Diff against target: 600 lines (+141/-143)
7 files modified
Src/Makefile (+47/-47)
Src/cranknic_evolg.F90 (+64/-59)
Src/cranknic_evolk.F90 (+16/-19)
Src/diag.F90 (+4/-0)
Src/m_initwf.F90 (+6/-12)
Src/m_inversemm.F90 (+3/-5)
version.info (+1/-1)
To merge this branch: bzr merge lp:~nickpapior/siesta/tddft-work
Reviewer Review Type Date Requested Status
Rafi Ullah Approve
Review via email: mp+331727@code.launchpad.net

Commit message

Fixes for running TDDFT branch on my box, reduced memory requirement

Description of the change

Made TDDFT branch work, and reduced memory.

I think this branch is a requirement to get it to work.

To post a comment you must log in.
Revision history for this message
Rafi Ullah (rraffiu) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Src/Makefile'
2--- Src/Makefile 2017-10-03 13:27:08 +0000
3+++ Src/Makefile 2017-10-03 17:43:24 +0000
4@@ -583,9 +583,6 @@
5 cgvc_zmatrix.o: alloc.o conjgr.o m_mpi_utils.o parallel.o precision.o sys.o
6 cgvc_zmatrix.o: units.o zmatrix.o
7 cgwf.o: egandd.o onmod.o parallel.o precision.o sys.o
8-sankey_change_basis.o: alloc.o m_matdiag.o parallel.o parallelsubs.o precision.o
9-sankey_change_basis.o: sparse_matrices.o sys.o wavefunctions.o kpoint_grid.o
10-sankey_change_basis.o: m_gamma.o m_spin.o atomlist.o diag_option.o
11 chemical.o: parallel.o precision.o sys.o
12 chempot.o: alloc.o mneighb.o parallel.o parallelsubs.o precision.o sys.o
13 chkdim.o: sys.o
14@@ -648,6 +645,13 @@
15 conjgr_old.o: precision.o
16 coor.o: alloc.o parallel.o precision.o siesta_geom.o sys.o units.o zmatrix.o
17 coxmol.o: files.o periodic_table.o precision.o
18+cranknic_evolg.o: alloc.o atomlist.o m_energies.o m_eo.o m_inversemm.o
19+cranknic_evolg.o: m_matswinvers.o m_spin.o m_steps.o parallel.o parallelsubs.o
20+cranknic_evolg.o: precision.o siesta_options.o sparse_matrices.o sys.o units.o
21+cranknic_evolg.o: wavefunctions.o
22+cranknic_evolk.o: atomlist.o cranknic_evolg.o kpoint_grid.o m_energies.o m_eo.o
23+cranknic_evolk.o: m_spin.o parallel.o parallelsubs.o precision.o
24+cranknic_evolk.o: siesta_options.o sparse_matrices.o units.o wavefunctions.o
25 create_Sparsity_SC.o: class_Sparsity.o geom_helper.o intrinsic_missing.o
26 create_Sparsity_Union.o: class_OrbitalDistribution.o class_Sparsity.o
27 create_Sparsity_Union.o: m_region.o parallel.o precision.o
28@@ -698,7 +702,7 @@
29 domain_decom.o: sparse_matrices.o sys.o
30 doping_uniform.o: alloc.o m_ntm.o mesh.o parallel.o precision.o sys.o
31 dynamics.o: alloc.o atomlist.o files.o ioxv.o m_mpi_utils.o parallel.o
32-dynamics.o: precision.o siesta_options.o sys.o units.o
33+dynamics.o: precision.o sys.o units.o
34 egandd.o: alloc.o denmat.o ener3.o globalise.o gradient.o on_subs.o onmod.o
35 egandd.o: onmod.o precision.o sys.o
36 eggbox.o: parallel.o precision.o
37@@ -706,12 +710,6 @@
38 electrostatic.o: precision.o radfft.o radial.o sys.o
39 ener3.o: alloc.o globalise.o m_mpi_utils.o onmod.o precision.o
40 ener3lomem.o: alloc.o globalise.o m_mpi_utils.o onmod.o precision.o
41-cranknic_evolg.o: alloc.o m_eo.o m_matswinvers.o m_steps.o parallel.o parallelsubs.o
42-cranknic_evolg.o: precision.o siesta_options.o sparse_matrices.o sys.o wavefunctions.o
43-cranknic_evolg.o: m_spin.o atomlist.o m_energies.o units.o m_inversemm.o
44-cranknic_evolk.o: parallel.o parallelsubs.o precision.o siesta_options.o m_spin.o
45-cranknic_evolk.o: wavefunctions.o sparse_matrices.o atomlist.o kpoint_grid.o
46-cranknic_evolk.o: units.o m_energies.o m_eo.o cranknic_evolg.o
47 extrapolateSpData2D.o: class_Data2D.o class_OrbitalDistribution.o
48 extrapolateSpData2D.o: class_SpData2D.o class_Sparsity.o restructSpData2D.o
49 extrapolon.o: parallel.o precision.o sys.o
50@@ -768,9 +766,9 @@
51 iomd.o: files.o precision.o
52 iopipes.o: parallel.o precision.o sys.o
53 iosockets.o: cellsubs.o fsockets.o m_mpi_utils.o parallel.o precision.o sys.o
54+iotdxv.o: files.o parallel.o precision.o
55 iowfs_netcdf.o: alloc.o parallel.o parallelsubs.o precision.o sys.o
56 ioxv.o: files.o parallel.o precision.o
57-iotdxv.o: files.o parallel.o precision.o
58 iozm.o: files.o parallel.o precision.o siesta_geom.o zmatrix.o
59 ipack.o: sys.o
60 kgrid.o: parallel.o precision.o units.o
61@@ -815,9 +813,8 @@
62 m_efield.o: siesta_geom.o sys.o units.o
63 m_energies.o: precision.o
64 m_eo.o: precision.o
65-m_evolve.o: alloc.o m_memory.o parallel.o parallelsubs.o precision.o sys.o
66-m_evolve.o: atomlist.o m_spin.o m_gamma.o sparse_matrices.o kpoint_grid.o
67-m_evolve.o: cranknic_evolg.o cranknic_evolk.o
68+m_evolve.o: cranknic_evolg.o cranknic_evolk.o m_gamma.o m_spin.o precision.o
69+m_evolve.o: sys.o
70 m_exp_coord.o: files.o m_os.o parallel.o precision.o units.o
71 m_filter.o: bessph.o precision.o radfft.o sorting.o sys.o
72 m_fire.o: parallel.o precision.o
73@@ -840,10 +837,9 @@
74 m_hs_matrix.o: alloc.o cellsubs.o geom_helper.o precision.o sys.o
75 m_hsx.o: atm_types.o atmfuncs.o atomlist.o files.o parallel.o parallelsubs.o
76 m_hsx.o: precision.o siesta_geom.o sys.o
77-m_initwf.o: alloc.o densematrix.o fermid.o diag.o m_eo.o m_memory.o
78-m_initwf.o: parallel.o parallelsubs.o precision.o sparse_matrices.o sys.o
79-m_initwf.o: wavefunctions.o kpoint_grid.o atomlist.o m_spin.o m_gamma.o
80-m_initwf.o: diag_option.o
81+m_initwf.o: alloc.o atomlist.o densematrix.o diag.o diag_option.o fermid.o
82+m_initwf.o: kpoint_grid.o m_eo.o m_gamma.o m_memory.o m_spin.o parallel.o
83+m_initwf.o: parallelsubs.o precision.o sparse_matrices.o sys.o wavefunctions.o
84 m_integrate.o: precision.o
85 m_inversemm.o: precision.o
86 m_io.o: sys.o
87@@ -857,8 +853,8 @@
88 m_iorho.o: alloc.o parallel.o parallelsubs.o precision.o sys.o
89 m_iostruct.o: alloc.o files.o m_mpi_utils.o parallel.o precision.o
90 m_iostruct.o: siesta_geom.o sys.o units.o
91-m_iotddft.o: files.o m_dipol.o m_steps.o parallel.o siesta_options.o
92-m_iotddft.o: wavefunctions.o units.o m_io.o
93+m_iotddft.o: files.o m_dipol.o m_io.o m_steps.o parallel.o siesta_options.o
94+m_iotddft.o: units.o wavefunctions.o
95 m_kinetic.o: precision.o
96 m_mat_invert.o: intrinsic_missing.o m_pivot_array.o precision.o
97 m_matdiag.o: precision.o
98@@ -1207,6 +1203,9 @@
99 rhoofd.o: meshdscf.o meshphi.o parallel.o parallelsubs.o precision.o sys.o
100 rhoofdsp.o: alloc.o atm_types.o atmfuncs.o atomlist.o listsc.o mesh.o
101 rhoofdsp.o: meshdscf.o meshphi.o precision.o sys.o
102+sankey_change_basis.o: alloc.o atomlist.o diag_option.o kpoint_grid.o m_gamma.o
103+sankey_change_basis.o: m_matdiag.o m_spin.o parallel.o parallelsubs.o
104+sankey_change_basis.o: precision.o sparse_matrices.o sys.o wavefunctions.o
105 save_density_matrix.o: atomlist.o files.o iodm_netcdf.o m_energies.o m_iodm.o
106 save_density_matrix.o: m_matio.o m_ncdf_siesta.o m_spin.o m_steps.o
107 save_density_matrix.o: m_ts_global_vars.o m_ts_iodm.o m_ts_options.o
108@@ -1258,17 +1257,17 @@
109 siesta_forces.o: atomlist.o class_Fstack_Data1D.o class_SpData2D.o compute_dm.o
110 siesta_forces.o: compute_energies.o compute_max_diff.o files.o
111 siesta_forces.o: final_H_f_stress.o flook_siesta.o kpoint_grid.o
112-siesta_forces.o: m_check_walltime.o m_convergence.o m_energies.o m_eo.o
113-siesta_forces.o: m_forces.o m_gamma.o m_initwf.o m_iodm_old.o m_mixing.o
114-siesta_forces.o: m_mixing_scf.o m_mpi_utils.o m_ncdf_siesta.o m_pexsi.o
115-siesta_forces.o: m_pexsi_driver.o m_rhog.o m_spin.o m_steps.o m_stress.o
116-siesta_forces.o: m_transiesta.o m_ts_charge.o m_ts_electype.o
117-siesta_forces.o: m_ts_global_vars.o m_ts_method.o m_ts_options.o mixer.o
118-siesta_forces.o: parallel.o post_scf_work.o precision.o save_density_matrix.o
119-siesta_forces.o: scfconvergence_test.o setup_H0.o setup_hamiltonian.o
120-siesta_forces.o: siesta_cml.o siesta_dicts.o siesta_geom.o siesta_master.o
121-siesta_forces.o: siesta_options.o sparse_matrices.o state_analysis.o
122-siesta_forces.o: state_init.o sys.o timer.o units.o write_subs.o
123+siesta_forces.o: m_check_walltime.o m_convergence.o m_energies.o m_forces.o
124+siesta_forces.o: m_initwf.o m_iodm_old.o m_mixing.o m_mixing_scf.o
125+siesta_forces.o: m_mpi_utils.o m_ncdf_siesta.o m_pexsi.o m_pexsi_driver.o
126+siesta_forces.o: m_rhog.o m_spin.o m_steps.o m_stress.o m_transiesta.o
127+siesta_forces.o: m_ts_charge.o m_ts_electype.o m_ts_global_vars.o m_ts_method.o
128+siesta_forces.o: m_ts_options.o mixer.o parallel.o post_scf_work.o precision.o
129+siesta_forces.o: save_density_matrix.o scfconvergence_test.o setup_H0.o
130+siesta_forces.o: setup_hamiltonian.o siesta_cml.o siesta_dicts.o siesta_geom.o
131+siesta_forces.o: siesta_master.o siesta_options.o sparse_matrices.o
132+siesta_forces.o: state_analysis.o state_init.o sys.o timer.o units.o
133+siesta_forces.o: write_subs.o
134 siesta_geom.o: precision.o
135 siesta_init.o: alloc.o atomlist.o bands.o bsc_xcmod.o
136 siesta_init.o: class_Fstack_Pair_Geometry_SpData2D.o densematrix.o
137@@ -1280,7 +1279,7 @@
138 siesta_init.o: parallel.o parallelsubs.o projected_DOS.o siesta_cmlsubs.o
139 siesta_init.o: siesta_dicts.o siesta_geom.o siesta_options.o sparse_matrices.o
140 siesta_init.o: struct_init.o sys.o timer.o timestamp.o ts_init.o writewave.o
141-siesta_init.o: zmatrix.o
142+siesta_init.o: zmatrix.o
143 siesta_master.o: iopipes.o iosockets.o precision.o sys.o
144 siesta_move.o: atomlist.o broyden_optim.o cell_broyden_optim.o
145 siesta_move.o: cell_fire_optim.o dynamics.o fire_optim.o flook_siesta.o ioxv.o
146@@ -1292,10 +1291,10 @@
147 siesta_tddft.o: alloc.o atomlist.o compute_energies.o final_H_f_stress.o
148 siesta_tddft.o: kpoint_grid.o m_energies.o m_eo.o m_evolve.o m_gamma.o
149 siesta_tddft.o: m_initwf.o m_iotddft.o m_mpi_utils.o m_spin.o m_steps.o
150-siesta_tddft.o: overfsm.o parallel.o precision.o setup_H0.o setup_hamiltonian.o
151-siesta_tddft.o: siesta_cml.o siesta_options.o sparse_matrices.o
152-siesta_tddft.o: state_analysis.o state_init.o sys.o wavefunctions.o
153-siesta_tddft.o: sankey_change_basis.o
154+siesta_tddft.o: overfsm.o parallel.o precision.o sankey_change_basis.o
155+siesta_tddft.o: setup_H0.o setup_hamiltonian.o siesta_cml.o siesta_options.o
156+siesta_tddft.o: sparse_matrices.o state_analysis.o state_init.o sys.o
157+siesta_tddft.o: wavefunctions.o
158 sparse_matrices.o: alloc.o class_Fstack_Pair_Geometry_SpData2D.o
159 sparse_matrices.o: class_OrbitalDistribution.o class_SpData1D.o
160 sparse_matrices.o: class_SpData2D.o class_Sparsity.o precision.o
161@@ -1311,19 +1310,19 @@
162 state_init.o: alloc.o atomlist.o class_Data2D.o class_SpData1D.o
163 state_init.o: class_SpData2D.o class_Sparsity.o create_Sparsity_SC.o
164 state_init.o: domain_decom.o files.o hsparse.o iodm_netcdf.o iodmhs_netcdf.o
165-state_init.o: ioxv.o kpoint_grid.o ldau_specs.o m_chess.o m_energies.o m_eo.o
166-state_init.o: m_gamma.o m_mixing.o m_mixing_scf.o m_mpi_utils.o m_new_dm.o
167-state_init.o: m_os.o m_pivot_methods.o m_rmaxh.o m_sparse.o
168+state_init.o: iotdxv.o ioxv.o kpoint_grid.o ldau_specs.o m_chess.o m_energies.o
169+state_init.o: m_eo.o m_gamma.o m_mixing.o m_mixing_scf.o m_mpi_utils.o
170+state_init.o: m_new_dm.o m_os.o m_pivot_methods.o m_rmaxh.o m_sparse.o
171 state_init.o: m_sparsity_handling.o m_spin.o m_steps.o m_supercell.o
172 state_init.o: m_test_io.o m_ts_charge.o m_ts_electype.o m_ts_global_vars.o
173 state_init.o: m_ts_io.o m_ts_options.o m_ts_sparse.o m_ts_tri_init.o
174 state_init.o: normalize_dm.o overlap.o parallel.o proximity_check.o
175 state_init.o: siesta_cml.o siesta_geom.o siesta_options.o sparse_matrices.o
176-state_init.o: sys.o units.o write_subs.o zmatrix.o iotdxv.o
177-struct_init.o: alloc.o atmfuncs.o atomlist.o files.o ioxv.o m_exp_coord.o
178-struct_init.o: m_iostruct.o m_mpi_utils.o m_steps.o parallel.o periodic_table.o
179-struct_init.o: siesta_cml.o siesta_geom.o siesta_master.o siesta_options.o
180-struct_init.o: units.o zmatrix.o iotdxv.o
181+state_init.o: sys.o units.o write_subs.o zmatrix.o
182+struct_init.o: alloc.o atmfuncs.o atomlist.o files.o iotdxv.o ioxv.o
183+struct_init.o: m_exp_coord.o m_iostruct.o m_mpi_utils.o m_steps.o parallel.o
184+struct_init.o: periodic_table.o siesta_cml.o siesta_geom.o siesta_master.o
185+struct_init.o: siesta_options.o units.o zmatrix.o
186 sys.o: parallel.o siesta_cml.o
187 timer.o: extrae_eventllist.o extrae_module.o m_timer.o parallel.o sys.o
188 timer.o: timer_tree.o
189@@ -1343,8 +1342,8 @@
190 vmatsp.o: alloc.o atm_types.o atmfuncs.o atomlist.o listsc.o mesh.o meshdscf.o
191 vmatsp.o: meshphi.o precision.o
192 vmb.o: m_fixed.o parallel.o precision.o sys.o
193-wavefunctions.o: parallel.o precision.o sparse_matrices.o kpoint_grid.o
194-wavefunctions.o: atomlist.o m_spin.o m_matswinvers.o
195+wavefunctions.o: atomlist.o kpoint_grid.o m_gamma.o m_matswinvers.o m_spin.o
196+wavefunctions.o: parallel.o parallelsubs.o precision.o sparse_matrices.o
197 write_inp_wannier.o: alloc.o atmfuncs.o atomlist.o m_ntm.o m_orderbands.o
198 write_inp_wannier.o: mneighb.o parallel.o parallelsubs.o precision.o
199 write_inp_wannier.o: siesta2wannier90.o siesta_geom.o
200@@ -1459,8 +1458,8 @@
201 m_grdsam.o: grdsam.o
202 m_hsparse.o: hsparse.o
203 m_intramol_pressure.o: remove_intramol_pressure.o
204+m_iotdxv.o: iotdxv.o
205 m_ioxv.o: ioxv.o
206-m_iotdxv.o: iotdxv.o
207 m_kinefsm.o: kinefsm.o
208 m_ksv.o: ksv.o
209 m_ksvinit.o: ksvinit.o
210@@ -1489,6 +1488,7 @@
211 m_rhofft.o: rhofft.o
212 m_rhoofd.o: rhoofd.o
213 m_rusage.o: rusage.o
214+m_sankey_change_basis.o: sankey_change_basis.o
215 m_save_density_matrix.o: save_density_matrix.o
216 m_scf_options.o: m_options.o
217 m_scfconvergence_test.o: scfconvergence_test.o
218
219=== modified file 'Src/cranknic_evolg.F90'
220--- Src/cranknic_evolg.F90 2017-10-03 13:27:08 +0000
221+++ Src/cranknic_evolg.F90 2017-10-03 17:43:24 +0000
222@@ -56,21 +56,22 @@
223 real(dp) :: delt
224 !
225 type(matrix) :: Hauxms,Sauxms, wfaux1, wfaux2
226- character(3) :: m_operation
227- character(5) :: m_storage
228 complex(dp) :: cvar1, cvar2
229+
230+#ifdef MPI
231+ character(len=5), parameter :: m_storage = 'pzdbc'
232+ character(len=3), parameter :: m_operation = 'lap'
233+#else
234+ character(len=5), parameter :: m_storage = 'szden'
235+ character(len=5), parameter :: m_operation = 'lap'
236+#endif
237+
238 !
239 integer :: i, j, io, jo, ie, ispin, ind, nocc
240 !
241 real(dp) :: eigv
242 logical, save :: firsttime = .true.
243-#ifdef MPI
244- m_storage='pzdbc'
245- m_operation='lap'
246-#else
247- m_storage='szden'
248- m_operation='lap'
249-#endif
250+
251 #ifdef DEBUG
252 call write_debug( ' PRE cn_evolg' )
253 #endif
254@@ -165,38 +166,46 @@
255 !*************************************************************************
256
257 implicit none
258- !
259+
260 integer :: no
261 real(kind=dp) :: deltat
262 type(matrix) :: H,S,phi
263+
264 ! Internal variables
265- type(matrix) :: aux1,aux2,aux3,aux4
266+ type(matrix) :: LHS, RHS
267 complex(kind=dp) :: alpha
268- character :: m_storage*5, m_operation*3
269- logical, save :: inversemm_linear = .true.
270- !
271+
272+ complex(kind=dp), parameter :: cZERO = cmplx(0._dp, 0._dp, dp)
273+ complex(kind=dp), parameter :: cONE = cmplx(1._dp, 0._dp, dp)
274+
275 #ifdef MPI
276- m_storage='pzdbc'
277- m_operation='lap'
278+ character(len=5), parameter :: m_storage = 'pzdbc'
279+ character(len=3), parameter :: m_operation = 'lap'
280 #else
281- m_storage='szden'
282- m_operation='lap'
283+ character(len=5), parameter :: m_storage = 'szden'
284+ character(len=5), parameter :: m_operation = 'lap'
285 #endif
286- !
287- call m_allocate(aux1,no,no,m_storage)
288- call m_allocate(aux2,no,no,m_storage)
289- call m_allocate(aux3,phi%dim1,phi%dim2,m_storage)
290+
291+ logical, parameter :: inversemm_linear = .true.
292+
293 ! First order expansion for the evolution operator
294- alpha=-0.5_dp*cmplx(0.0_dp,1.0_dp,dp)*deltat
295- ! Copying S to aux1 and aux2
296- call m_add(S,'n',aux1,cmplx(1.0_dp,0.0_dp,dp),cmplx(0.0_dp,0.0_dp,dp),m_operation)
297- call m_add(S,'n',aux2,cmplx(1.0_dp,0.0_dp,dp),cmplx(0.0_dp,0.0_dp,dp),m_operation)
298- ! Calculating S - alpha * H
299- call m_add(H,'n',aux1,alpha,cmplx(1.0_dp,0.0_dp,dp),m_operation)
300- ! Calculating (S - alpha * H) * phi
301- call mm_multiply(aux1,'n',phi,'n',aux3,cmplx(1.0,0.0,dp),cmplx(0.0,0.0,dp),m_operation)
302- ! Calculating S + alpha * H
303- call m_add(H,'n',aux2,-1.0_dp*alpha,cmplx(1.0_dp,0.0_dp,dp),m_operation)
304+ alpha = -0.5_dp * cmplx(0.0_dp,1.0_dp,dp) * deltat
305+
306+ ! Allocate work arrays
307+ call m_allocate(LHS,no,no,m_storage)
308+ call m_allocate(RHS,phi%dim1,phi%dim2,m_storage)
309+
310+ ! Setup S - alpha * H
311+ call m_add(S, 'n', LHS, cone, cZERO, m_operation)
312+ call m_add(H, 'n', LHS, alpha, cONE, m_operation)
313+
314+ ! Calculate
315+ ! (S - alpha * H) psi
316+ call mm_multiply(LHS, 'n', phi, 'n', RHS, cONE, cZERO, m_operation)
317+
318+ ! Setup S + alpha * H
319+ call m_add(S, 'n', LHS, cONE, cZERO, m_operation)
320+ call m_add(H, 'n', LHS, -alpha, cONE, m_operation)
321
322 !---------------------------------------------------------------------------------------!
323 ! There are two ways to compute inverse. One is to first obtain
324@@ -209,23 +218,21 @@
325 ! hard-wired by the inversemm_linear flag, while keeping first one for testing
326 ! etc.
327 !----------------------------------------------------------------------------------------!
328-
329- if (inversemm_linear) then
330+ if ( inversemm_linear ) then
331 ! Calculating (S + alpha * H)^-1 * (S - alpha * H) * phi
332- call inversemm(aux2,aux3)
333- ! Compying phi_evolved back to phi
334- call m_add(aux3,'n',phi,cmplx(1.0_dp,0.0_dp,dp),cmplx(0.0_dp,0.0_dp,dp),m_operation)
335+ call inversemm(LHS, RHS)
336+ ! Copying phi_evolved back to phi
337+ call m_add(RHS, 'n', phi, cONE, cZERO, m_operation)
338 else
339 ! Calculating inverse of (S + alpha * H)
340- call getinverse(aux2)
341- !(S + alpha * H)^-1 * (S - alpha * H) * phi
342- call mm_multiply(aux2,'n',aux3,'n',phi,cmplx(1.0,0.0,dp),cmplx(0.0,0.0,dp),m_operation)
343+ call getinverse(LHS)
344+ ! (S + alpha * H)^-1 * (S - alpha * H) * phi
345+ call mm_multiply(LHS, 'n', RHS, 'n', phi, cONE, cZERO, m_operation)
346 endif
347- !
348- call m_deallocate(aux1)
349- call m_deallocate(aux2)
350- call m_deallocate(aux3)
351- !
352+
353+ call m_deallocate(LHS)
354+ call m_deallocate(RHS)
355+
356 END SUBROUTINE Uphi
357 !------------------------------------------------------------------------------------!
358 SUBROUTINE evol1new(Hauxms, Sauxms, no, ispin, &
359@@ -259,8 +266,13 @@
360 !
361 type(matrix),intent(in) :: Hauxms, Sauxms
362 type(matrix),allocatable,save :: Hsve(:)
363- character(5) :: m_storage
364- character(3) :: m_operation
365+#ifdef MPI
366+ character(len=5), parameter :: m_storage = 'pzdbc'
367+ character(len=3), parameter :: m_operation = 'lap'
368+#else
369+ character(len=5), parameter :: m_storage = 'szden'
370+ character(len=5), parameter :: m_operation = 'lap'
371+#endif
372 logical :: extrapol
373 ! Internal variables ...
374 integer :: i, l
375@@ -268,14 +280,7 @@
376 logical, save :: fsttim(2) = (/.true. , .true./)
377 logical, save :: frsttime = .true.
378 save :: deltat
379- !
380-#ifdef MPI
381- m_storage='pzdbc'
382- m_operation='lap'
383-#else
384- m_storage='szden'
385- m_operation='lap'
386-#endif
387+
388 if (frsttime) then
389 !nstp is the number of "substeps" in the electronic evolution
390 !the evolution operator is applied in each substep although
391@@ -283,10 +288,10 @@
392 !a SCF Hamiltonian
393 deltat=delt/0.04837769d0/dble(nstp)
394 if (Node.eq.0) then
395- write(6,*) 'cn_evolg: TDED time step (fs) = ',delt
396- if (extrapol) then
397- write(6,*) 'cn_evolg: TDED time sub-step (fs) = ',delt/nstp
398- end if
399+ write(6,'(/a,f16.6)') 'cn_evolg: TDED time step (fs) = ',delt
400+ if (extrapol) then
401+ write(6,'(a,f16.6)') 'cn_evolg: TDED time sub-step (fs) = ',delt/nstp
402+ end if
403 end if
404 allocate(Hsve(nspin))
405 do i=1, nspin
406
407=== modified file 'Src/cranknic_evolk.F90'
408--- Src/cranknic_evolk.F90 2017-08-18 18:36:36 +0000
409+++ Src/cranknic_evolk.F90 2017-10-03 17:43:24 +0000
410@@ -43,21 +43,20 @@
411
412 TYPE(matrix) :: Hauxms, Sauxms, wfaux1, wfaux2
413
414- CHARACTER(LEN=3) :: m_operation
415- CHARACTER(LEN=5) :: m_storage
416+#ifdef MPI
417+ character(len=5), parameter :: m_storage = 'pzdbc'
418+ character(len=3), parameter :: m_operation = 'lap'
419+#else
420+ character(len=5), parameter :: m_storage = 'szden'
421+ character(len=5), parameter :: m_operation = 'lap'
422+#endif
423
424 COMPLEX(dp) :: cvar1, cvar2
425
426 REAL(dp) :: kxij, ckxij, skxij
427 INTEGER :: ik, ispin, i, j, io, jo, ind, juo, nocc
428 LOGICAL, SAVE :: firstime = .true.
429-#ifdef MPI
430- m_storage = 'pzdbc'
431- m_operation = 'lap'
432-#else
433- m_storage = 'szden'
434- m_operation = 'lap'
435-#endif
436+
437 #ifdef DEBUG
438 call write_debug( ' PRE cn_evolk' )
439 #endif
440@@ -143,21 +142,19 @@
441 TYPE(matrix) :: Hauxms, Sauxms
442 INTEGER :: i, j, l, ik, ispin
443 REAL(dp) :: delt, deltat, rvar1
444- CHARACTER(3) :: m_operation
445- CHARACTER(5) :: m_storage
446+#ifdef MPI
447+ character(len=5), parameter :: m_storage = 'pzdbc'
448+ character(len=3), parameter :: m_operation = 'lap'
449+#else
450+ character(len=5), parameter :: m_storage = 'szden'
451+ character(len=5), parameter :: m_operation = 'lap'
452+#endif
453
454 COMPLEX(dp) :: alpha
455
456 LOGICAL, SAVE :: firsttime = .true.
457 LOGICAL, DIMENSION (:,:), ALLOCATABLE, SAVE :: firstimeK
458-#ifdef MPI
459- m_storage = 'pzdbc'
460- m_operation = 'lap'
461-#else
462- m_storage = 'szden'
463- m_operation = 'lap'
464-#endif
465- !
466+
467 IF(firsttime) THEN
468 deltat = delt/0.04837769d0/dble(ntded_sub)
469 IF (IOnode) THEN
470
471=== modified file 'Src/diag.F90'
472--- Src/diag.F90 2017-08-07 10:57:47 +0000
473+++ Src/diag.F90 2017-10-03 17:43:24 +0000
474@@ -176,6 +176,9 @@
475 end subroutine diag_exit
476
477 subroutine diag_descinit(N, NR, BlockSize, desc, iC)
478+#ifdef MPI
479+ use mpi_siesta, only: MPI_Comm_World
480+#endif
481 integer, intent(in) :: N, NR, BlockSize
482 integer, intent(inout) :: desc(9)
483 integer, intent(in), optional :: iC
484@@ -184,6 +187,7 @@
485 if ( present(iC) ) then
486 call descinit(desc,N,N,BlockSize,BlockSize,0,0,iC,NR,ierr)
487 else
488+ if ( iCTXT < 0 ) iCTXT = MPI_Comm_World
489 call descinit(desc,N,N,BlockSize,BlockSize,0,0,iCTXT,NR,ierr)
490 end if
491 if ( ierr /= 0 ) &
492
493=== modified file 'Src/m_initwf.F90'
494--- Src/m_initwf.F90 2017-08-30 14:09:10 +0000
495+++ Src/m_initwf.F90 2017-10-03 17:43:24 +0000
496@@ -13,8 +13,6 @@
497 private
498 !
499 public :: initwf
500- !
501- integer :: ictxt
502
503 CONTAINS
504 !
505@@ -127,7 +125,6 @@
506 if(ParallelOverk) then
507 call die ('initwf: TDDFT is not parallelized over k-points.')
508 end if
509- ictxt = MPI_Comm_World
510 #endif
511 ! Read spin-spiral wavevector (if defined)
512 call readsp( qspiral, spiral )
513@@ -303,8 +300,8 @@
514 subroutine diaggiwf(nspin,nuo,maxuo,maxnh, maxo,Haux,Saux,psi, &
515 nuotot,occup)
516 #ifdef MPI
517- use parallel, only : BlockSize,Node
518- use m_diag, only: diag_descinit
519+ use parallel, only : BlockSize,Node
520+ use m_diag, only: diag_descinit
521 #endif
522 !
523 implicit none
524@@ -322,7 +319,7 @@
525 #endif
526 !
527 #ifdef MPI
528- call diag_descinit(nuotot,nuotot,BlockSize,desch,ictxt)
529+ call diag_descinit(nuotot,nuotot,BlockSize,desch)
530 #endif
531 !
532 indwf=0
533@@ -338,7 +335,7 @@
534 Haux(jo,io)=Haux(jo,io)+H(ind,ispin)
535 end do
536 end do
537- call rdiag(Haux,Saux,nuotot,nuo,nuotot,eo,psi(1,1,ispin),nuotot,1,ierror)
538+ call rdiag(Haux,Saux,nuotot,nuo,nuotot,eo,psi(1,1,ispin),nuotot,1,ierror,BlockSize)
539 if (ierror .eq. 0) then
540 exit
541 else if ((ierror .ne. -1) .or. (ie .eq. 10)) then
542@@ -388,7 +385,7 @@
543 #endif
544 !
545 #ifdef MPI
546- call diag_descinit(nuotot,nuotot,BlockSize,desch,ictxt)
547+ call diag_descinit(nuotot,nuotot,BlockSize,desch)
548 #endif
549 !
550 indwf=0
551@@ -426,10 +423,7 @@
552 indwf=indwf+1
553 do j=1,nuotot
554 #ifdef MPI
555- do iuo=1,2
556- call pdelget('a',' ',varaux(iuo),psi(iuo,:,:),j,ie,desch)
557- enddo
558- element=cmplx(varaux(1),varaux(2),dp)
559+ call pzelget('a',' ',element,psi(:,:,:),j,ie,desch)
560 #else
561 element=cmplx(psi(1,j,ie),psi(2,j,ie),dp)
562 #endif
563
564=== modified file 'Src/m_inversemm.F90'
565--- Src/m_inversemm.F90 2017-10-03 13:27:08 +0000
566+++ Src/m_inversemm.F90 2017-10-03 17:43:24 +0000
567@@ -20,7 +20,7 @@
568 IMPLICIT NONE
569 !**************** INPUT ***********************************!
570 !
571-TYPE(matrix), INTENT(IN) :: C
572+TYPE(matrix), INTENT(INOUT) :: C
573 ! C: Matrix to be inverted before multiplication with D.
574 !
575 !**************** INOUT ***********************************!
576@@ -42,15 +42,13 @@
577 ALLOCATE(ipiv(C%iaux1(3)+C%iaux1(5)))
578 CALL pzgesv(C%dim1,D%dim2,C%zval,1,1,C%iaux1,ipiv,D%zval,1,1,D%iaux1,info)
579 IF (info .NE. 0) CALL die('ERROR: error in pzgesv')
580- DEALLOCATE(ipiv)
581- !
582 #else
583- !
584 ALLOCATE(ipiv(C%dim1))
585 CALL zgesv(C%dim1,D%dim2,C%zval,C%dim1,ipiv,D%zval,D%dim1,info)
586 IF (info .NE. 0) CALL die('ERROR: error in zgsesv')
587+#endif
588+
589 DEALLOCATE(ipiv)
590-#endif
591 !
592 END SUBROUTINE inversemm
593 !
594
595=== modified file 'version.info'
596--- version.info 2017-10-03 13:27:08 +0000
597+++ version.info 2017-10-03 17:43:24 +0000
598@@ -1,1 +1,1 @@
599-trunk-611-tddft02-40
600+trunk-611-tddft02-40--np-1

Subscribers

People subscribed via source and target branches

to all changes: