Merge lp:~nickpapior/siesta/tddft-work into lp:~rraffiu/siesta/tddft02-format0.92
- tddft-work
- Merge into 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 |
Related bugs: |
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 |