(git:d18deda)
Loading...
Searching...
No Matches
smeagol_emtoptions.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2025 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief CP2K+SMEAGOL interface.
10!> \author Sergey Chulkov
11!> \author Christian Ahart
12!> \author Clotilde Cucinotta
13! **************************************************************************************************
15 USE cell_types, ONLY: cell_type, &
17 USE cp_dbcsr_api, ONLY: dbcsr_get_info, &
19#if defined(__SMEAGOL)
20 USE global_meshvar, ONLY: smeagolglobal_orbital_bs => orbital_bs
21#endif
26 USE kinds, ONLY: default_string_length, &
27 dp
28#if defined(__SMEAGOL)
29 USE mbfield, ONLY: smeagolglobal_zeemanbx => zeemanbx, &
30 smeagolglobal_zeemanby => zeemanby, &
31 smeagolglobal_zeemanbz => zeemanbz
32#endif
34#if defined(__SMEAGOL)
35 USE mselfenergies, ONLY: setoptionsselfenergies
36 USE negfcoop, ONLY: coopinfo
37 USE negfmod, ONLY: &
38 smeagolglobal_dsigmade => dsigmade, &
39 smeagolglobal_calcmpsh => calcmpsh, &
40 smeagolglobal_nenet => nenet, &
41 smeagolglobal_rmoinit => rmoinit, &
42 smeagolglobal_rmolast => rmolast, &
43 smeagolglobal_rorbinit => rorbinit, &
44 smeagolglobal_rorblast => rorblast, &
45 smeagolglobal_maxkappa => maxkappa, &
46 smeagolglobal_tenergi => tenergi, &
47 smeagolglobal_tenergf => tenergf, &
48 smeagolglobal_vgate => vgate, &
49 smeagolglobal_zgater => zgater, &
50 smeagolglobal_zgatel => zgatel, &
51 smeagolglobal_alphag => alphag, &
52 smeagolglobal_timereversal => timereversal, &
53 smeagolglobal_trcaddvcdft => trcaddvcdft, &
54 smeagolglobal_addvgcompensatingisolatedlocalcharges => addvgcompensatingisolatedlocalcharges, &
55 smeagolglobal_add_rho_gate => add_rho_gate, &
56 smeagolglobal_debug_gate => debug_gate, &
57 smeagolglobal_empdoskso => empdoskso, &
58 smeagolglobal_emtimings => emtimings, &
59 smeagolglobal_ik_select => ik_select, &
60 smeagolglobal_q_gate => q_gate, &
61 smeagolglobal_rglxmin => rglxmin, &
62 smeagolglobal_rglxmax => rglxmax, &
63 smeagolglobal_rglymin => rglymin, &
64 smeagolglobal_rglymax => rglymax, &
65 smeagolglobal_rglzmin => rglzmin, &
66 smeagolglobal_rglzmax => rglzmax, &
67 smeagolglobal_pdosgs => pdosgs, &
68 smeagolglobal_skipright => skipright, &
69 smeagolglobal_sigmatodisk => sigmatodisk, &
70 smeagolglobal_bs_add => bs_add, &
71 smeagolglobal_bs_writetrc => bs_writetrc, &
72 smeagolglobal_writetk => writetk, &
73 smeagolglobal_setene => setene, &
74 smeagolglobal_overwritehs => overwritehs, &
75 smeagolglobal_transmembed => transmembed, &
76 smeagolglobal_writeevsigma => writeevsigma, &
77 smeagolglobal_skiptransm => skiptransm, &
78 smeagolglobal_deauto => deauto, &
79 smeagolglobal_geterrsigma => geterrsigma, &
80 smeagolglobal_getsigma => getsigma, &
81 smeagolglobal_trcef => trcef, &
82 smeagolglobal_rhosetzeroifhzero => rhosetzeroifhzero, &
83 smeagolglobal_m_usehinv => m_usehinv, &
84 smeagolglobal_m_usevinv => m_usevinv, &
85 smeagolglobal_m_callsvd => m_callsvd, &
86 smeagolglobal_m_complexbands => m_complexbands, &
87 smeagolglobal_m_dosleads => m_dosleads, &
88 smeagolglobal_leadsdos => leadsdos, &
89 smeagolglobal_leadspdos => leadspdos, &
90 smeagolglobal_emldos => emldos, &
91 smeagolglobal_emldos2 => emldos2, &
92 smeagolglobal_curr_distkene => curr_distkene, &
93 smeagolglobal_curr_distk => curr_distk, &
94 smeagolglobal_curr_dist => curr_dist, &
95 smeagolglobal_curr_disttrc => curr_disttrc, &
96 smeagolglobal_em_nonscf => em_nonscf, &
97 smeagolglobal_transmissionrl => transmissionrl, &
98 smeagolglobal_emsttk => emsttk, &
99 smeagolglobal_gett0s => gett0s, &
100 smeagolglobal_transmissionchannels => transmissionchannels, &
101 smeagolglobal_transmissionchannelswfs => transmissionchannelswfs, &
102 smeagolglobal_transmissionmatrix => transmissionmatrix, &
103 smeagolglobal_transmissionmatrixwfs => transmissionmatrixwfs, &
104 smeagolglobal_transmissionmatrixpdos => transmissionmatrixpdos, &
105 smeagolglobal_em_endcode1 => em_endcode1, &
106 smeagolglobal_transmoverk => transmoverk, &
107 smeagolglobal_emdos => emdos, &
108 smeagolglobal_empdos => empdos, &
109 smeagolglobal_empdosk => empdosk, &
110 smeagolglobal_writeiktrck => writeiktrck, &
111 smeagolglobal_cbspart => cbspart, &
112 smeagolglobal_evec => evec, &
113 smeagolglobal_negfon => negfon, &
114 smeagolglobal_outinfo => outinfo, &
115 smeagolglobal_writenk => writenk, &
116 smeagolglobal_set_rhoboundary_leads => set_rhoboundary_leads, &
117 smeagolglobal_set_rhoboundaryoverlap_leads => set_rhoboundaryoverlap_leads, &
118 smeagolglobal_set_hboundary_leads => set_hboundary_leads, &
119 smeagolglobal_set_hlr_zero => set_hlr_zero, &
120 smeagolglobal_skipnonequilibriumrho => skipnonequilibriumrho, &
121 smeagolglobal_skipequilibriumrho => skipequilibriumrho, &
122 smeagolglobal_computeimpuritygfmatsubara => computeimpuritygfmatsubara, &
123 smeagolglobal_printimpuritygfmatsubara => printimpuritygfmatsubara, &
124 smeagolglobal_callimpuritysolver => callimpuritysolver, &
125 smeagolglobal_maxdepth => maxdepth, &
126 smeagolglobal_ndivisions => ndivisions, &
127 smeagolglobal_storesigma => storesigma, &
128 smeagolglobal_bs_method => bs_method, &
129 smeagolglobal_bs_nmid => bs_nmid, &
130 smeagolglobal_nrunsigmamax => nrunsigmamax, &
131 smeagolglobal_bsrun => bsrun, &
132 smeagolglobal_bsskip => bsskip, &
133 smeagolglobal_bseskip => bseskip, &
134 smeagolglobal_bssc => bssc, &
135 smeagolglobal_inversion_solver => inversion_solver, &
136 smeagolglobal_onekp => onekp, &
137 smeagolglobal_nbss => nbss, &
138 smeagolglobal_nsplit => nsplit, &
139 smeagolglobal_transmissionchannelswfsskipene => transmissionchannelswfsskipene, &
140 smeagolglobal_transmissionchannelswfsskipkp => transmissionchannelswfsskipkp, &
141 smeagolglobal_transmissionmatrixpdosnwrite => transmissionmatrixpdosnwrite, &
142 smeagolglobal_transmissionmatrixisetphase => transmissionmatrixisetphase, &
143 smeagolglobal_minchannelindex => minchannelindex, &
144 smeagolglobal_maxchannelindex => maxchannelindex, &
145 smeagolglobal_n_replace_l => n_replace_l, &
146 smeagolglobal_n_replace_r => n_replace_r, &
147 smeagolglobal_curr_nb1 => curr_nb1, &
148 smeagolglobal_curr_nb2 => curr_nb2, &
149 smeagolglobal_nparallelk => nparallelk, &
150 smeagolglobal_getrhosinglelead => getrhosinglelead, &
151 smeagolglobal_bs_tol => bs_tol, &
152 smeagolglobal_bs_min => bs_min , &
153 smeagolglobal_hstol => hstol , &
154 smeagolglobal_deltaimag => deltaimag , &
155 smeagolglobal_deltaini => deltaini , &
156 smeagolglobal_deltatode => deltatode , &
157 smeagolglobal_critam => critam , &
158 smeagolglobal_setemin => setemin , &
159 smeagolglobal_setemax => setemax , &
160 smeagolglobal_tolab => tolab , &
161 smeagolglobal_weightrho => weightrho , &
162 smeagolglobal_thetaleadsl => thetaleadsl , &
163 smeagolglobal_phileadsl => phileadsl , &
164 smeagolglobal_thetaleadsr => thetaleadsr , &
165 smeagolglobal_phileadsr => phileadsr , &
166 smeagolglobal_deltaimagtrc => deltaimagtrc , &
167 smeagolglobal_m_tolki => m_tolki , &
168 smeagolglobal_m_svdtolmax => m_svdtolmax , &
169 smeagolglobal_m_svdtolmin => m_svdtolmin , &
170 smeagolglobal_m_dsigmamax => m_dsigmamax , &
171 smeagolglobal_m_rnoise => m_rnoise , &
172 smeagolglobal_m_skipsvd => m_skipsvd , &
173 smeagolglobal_m_svdtolzi => m_svdtolzi , &
174 smeagolglobal_sigmawideband => sigmawideband , &
175 smeagolglobal_emsttkscale => emsttkscale , &
176 smeagolglobal_nlsetzeroratio => nlsetzeroratio , &
177 smeagolglobal_nrsetzeroratio => nrsetzeroratio , &
178 smeagolglobal_curr_fl_l => curr_fl_l , &
179 smeagolglobal_curr_fr_l => curr_fr_l , &
180 smeagolglobal_curr_fl_r => curr_fl_r , &
181 smeagolglobal_curr_fr_r => curr_fr_r , &
182 smeagolglobal_deltamin => deltamin, &
183 smeagolglobal_tolsigma => tolsigma, &
184 smeagolglobal_trcde => trcde, &
185 smeagolglobal_deltabss_bs => deltabss_bs, &
186 smeagolglobal_gamma_negf => gamma_negf, &
187 smeagolglobal_emforces => emforces, &
188 smeagolglobal_emstt => emstt, &
189 smeagolglobal_emsttlin => emsttlin, &
190 smeagolglobal_gridmethod => gridmethod, &
191 smeagolglobal_integraltype => integraltype, &
192 smeagolglobal_ndivxy => ndivxy, &
193 smeagolglobal_ndivxynl => ndivxynl, &
194 smeagolglobal_negf_base_comm => negf_base_comm, &
195 smeagolglobal_nebss_bs => nebss_bs, &
196 smeagolglobal_nprocs_hs => nprocs_hs
197 USE sigma, ONLY: &
198 smeagolglobal_sigma_method => sigma_method
199#endif
202#include "./base/base_uses.f90"
203
204 IMPLICIT NONE
205 PRIVATE
206
207 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'smeagol_emtoptions'
208
210
211 CONTAINS
212
213 SUBROUTINE reademtr(smeagol_control, natoms, gamma_negf)
214 TYPE(smeagol_control_type), POINTER :: smeagol_control
215 INTEGER, INTENT(in) :: natoms
216 LOGICAL, INTENT(in) :: gamma_negf
217
218 CHARACTER(LEN=*), PARAMETER :: routinen = 'reademtr'
219
220 INTEGER :: handle
221
222 CALL timeset(routinen, handle)
223
224#if defined(__SMEAGOL)
225 cpassert(ASSOCIATED(smeagol_control%aux))
226
227 smeagolglobal_gamma_negf = gamma_negf
228
229 IF (smeagol_control%aux%AtmRVCte <= 0) smeagol_control%aux%AtmRVCte = natoms
230
231 smeagolglobal_dsigmade = smeagol_control%aux%dsigmade
232 smeagolglobal_calcmpsh = smeagol_control%aux%calcmpsh
233
234 smeagolglobal_nenet = smeagol_control%aux%NeneT
235 smeagolglobal_rmoinit = smeagol_control%aux%rmoinit
236 smeagolglobal_rmolast = smeagol_control%aux%rmolast
237 smeagolglobal_rorbinit = smeagol_control%aux%rorbinit
238 smeagolglobal_rorblast = smeagol_control%aux%rorblast
239
240 smeagolglobal_maxkappa = smeagol_control%aux%maxkappa
241
242 smeagolglobal_tenergi = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%TEnergI
243 smeagolglobal_tenergf = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%TEnergF
244 smeagolglobal_vgate = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%vgate
245 smeagolglobal_zgater = smeagol_control%aux%zgater
246 smeagolglobal_zgatel = smeagol_control%aux%zgatel
247 smeagolglobal_alphag = smeagol_control%aux%alphag
248
249 coopinfo%ccoop = smeagol_control%aux%COOPCalculate
250 coopinfo%nbond = smeagol_control%aux%COOPNumberOfBonds
251#else
252 CALL cp_abort(__location__, &
253 "CP2K was compiled with no SMEAGOL support.")
254 mark_used(smeagol_control)
255 mark_used(natoms)
256 mark_used(gamma_negf)
257#endif
258
259 CALL timestop(handle)
260 END SUBROUTINE reademtr
261
262 SUBROUTINE readoptionsnegf_dft(smeagol_control, ucell, torqueflag, torquelin)
263 TYPE(smeagol_control_type), POINTER :: smeagol_control
264 TYPE(cell_type), POINTER :: ucell
265 LOGICAL, INTENT(in) :: torqueflag, torquelin
266
267 CHARACTER(LEN=*), PARAMETER :: routinen = 'ReadOptionsNEGF_DFT'
268
269 INTEGER :: handle
270 REAL(kind=dp), DIMENSION(3) :: coord_real, coord_scaled
271
272 CALL timeset(routinen, handle)
273
274#if defined(__SMEAGOL)
275 cpassert(ASSOCIATED(smeagol_control%aux))
276
277 smeagolglobal_emstt = torqueflag
278 smeagolglobal_emsttlin = torquelin
279
280 ! In case of the original SIESTA+SMEAGOL, 'TimeReversal' keyword is enabled by default, therefore 'EM.TimeReversal' is also enabled.
281 ! In case of this CP2K+SMEAGOL interface, the default value of 'timereversal' variable is .FALSE.
282 IF (smeagol_control%aux%timereversal) THEN
283 CALL cp_warn(__location__, &
284 "The SMEAGOL keyword 'EM.TimeReversal' is not supported yet.")
285 END IF
286
287 smeagolglobal_timereversal = smeagol_control%aux%timereversal
288 smeagolglobal_trcaddvcdft = smeagol_control%aux%TRCAddVCDFT
289 smeagolglobal_addvgcompensatingisolatedlocalcharges = smeagol_control%aux%AddVgCompensatingIsolatedLocalCharges
290 smeagolglobal_add_rho_gate = smeagol_control%aux%Add_Rho_Gate
291 smeagolglobal_debug_gate = smeagol_control%aux%debug_gate
292 smeagolglobal_empdoskso = smeagol_control%aux%empdoskso
293 smeagolglobal_emtimings = smeagol_control%aux%emtimings
294
295 smeagolglobal_ik_select = smeagol_control%aux%ik_select
296
297 smeagolglobal_q_gate = smeagol_control%aux%Q_gate
298
299 ! readoptsnegf_negfmod_plist
300 IF (.NOT. smeagol_control%aux%isexplicit_RGlxmin) smeagol_control%aux%RGlxmin = 0.0_dp
301 IF (.NOT. smeagol_control%aux%isexplicit_RGlymin) smeagol_control%aux%RGlymin = 0.0_dp
302 IF (.NOT. smeagol_control%aux%isexplicit_RGlzmin) smeagol_control%aux%RGlzmin = 0.0_dp
303 IF (.NOT. smeagol_control%aux%isexplicit_RGlxmax) THEN
304 coord_scaled(:) = (/1.0_dp, 0.0_dp, 0.0_dp/)
305 CALL scaled_to_real(coord_real, coord_scaled, ucell)
306 smeagol_control%aux%RGlxmax = coord_real(1)
307 END IF
308 IF (.NOT. smeagol_control%aux%isexplicit_RGlymax) THEN
309 coord_scaled(:) = (/0.0_dp, 1.0_dp, 0.0_dp/)
310 CALL scaled_to_real(coord_real, coord_scaled, ucell)
311 smeagol_control%aux%RGlymax = coord_real(2)
312 END IF
313 IF (.NOT. smeagol_control%aux%isexplicit_RGlzmax) THEN
314 coord_scaled(:) = (/0.0_dp, 0.0_dp, 1.0_dp/)
315 CALL scaled_to_real(coord_real, coord_scaled, ucell)
316 smeagol_control%aux%RGlzmax = coord_real(3)
317 END IF
318 smeagolglobal_rglxmin = smeagol_control%aux%RGlxmin
319 smeagolglobal_rglxmax = smeagol_control%aux%RGlxmax
320 smeagolglobal_rglymin = smeagol_control%aux%RGlymin
321 smeagolglobal_rglymax = smeagol_control%aux%RGlymax
322 smeagolglobal_rglzmin = smeagol_control%aux%RGlzmin
323 smeagolglobal_rglzmax = smeagol_control%aux%RGlzmax
324
325 ! options to add a Zeeman term to the Hamiltonian
326 smeagolglobal_zeemanbx = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%ZeemanBx
327 smeagolglobal_zeemanby = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%ZeemanBy
328 smeagolglobal_zeemanbz = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%ZeemanBz
329#else
330 CALL cp_abort(__location__, &
331 "CP2K was compiled with no SMEAGOL support.")
332 mark_used(smeagol_control)
333 mark_used(ucell)
334 mark_used(torqueflag)
335 mark_used(torquelin)
336 ! local variables
337 mark_used(coord_real)
338 mark_used(coord_scaled)
339#endif
340
341 CALL timestop(handle)
342 END SUBROUTINE readoptionsnegf_dft
343
344 SUBROUTINE emtrans_options(smeagol_control, matrix_s, para_env, iter, istep, inicoor, iv, delta, nk)
345 TYPE(smeagol_control_type), POINTER :: smeagol_control
346 TYPE(dbcsr_type), INTENT(in), POINTER :: matrix_s
347 TYPE(mp_para_env_type), POINTER :: para_env
348 INTEGER, INTENT(in) :: iter, istep, inicoor, iv
349 REAL(kind=dp), INTENT(in) :: delta
350 INTEGER, INTENT(in) :: nk
351
352 CHARACTER(LEN=*), PARAMETER :: routinen = 'emtrans_options'
353
354 CHARACTER(len=default_string_length) :: actual_val_str, expected_val_str
355 INTEGER :: getrhosingleleaddefault, handle, i, iatom, n1, nblkcols_total, &
356 nparallelk, nparallelkbuf
357 INTEGER, DIMENSION(:), POINTER :: col_blk_offset, col_blk_size
358
359 CALL timeset(routinen, handle)
360
361#if defined(__SMEAGOL)
362 cpassert(ASSOCIATED(smeagol_control%aux))
363
364 CALL dbcsr_get_info(matrix=matrix_s, nblkcols_total=nblkcols_total, &
365 col_blk_size=col_blk_size, col_blk_offset=col_blk_offset)
366 ! number of atomic orbitals.
367 ! The name n1 is meaningless, but it is used in the original SIESTA's version of emtrans_options() subroutine
368 n1 = sum(col_blk_size(1:nblkcols_total))
369
370 IF ((iter == 1) .AND. (istep == inicoor) .AND. (iv == 0)) THEN
371
372 IF (smeagol_control%aux%gridmethod == smeagol_gridmethod_traditional) THEN
373 smeagolglobal_gridmethod = 'Traditional'
374 ELSE IF (smeagol_control%aux%gridmethod == smeagol_gridmethod_adaptive) THEN
375 smeagolglobal_gridmethod = 'Adaptivegrid'
376 ELSE
377 smeagolglobal_gridmethod = 'UNKNOWN'
378 END IF
379
380 IF (smeagol_control%aux%integraltype == smeagol_integraltype_gauss_legendre) THEN
381 smeagolglobal_integraltype = 'gauss-legendre'
382 ELSE IF (smeagol_control%aux%integraltype == smeagol_integraltype_gauss_chebyshev) THEN
383 smeagolglobal_integraltype = 'gauss-chebyshev'
384 ELSE
385 smeagolglobal_integraltype = 'UNKNOWN'
386 END IF
387
388 smeagolglobal_negf_base_comm = para_env%get_handle()
389
390 IF (mod(smeagol_control%aux%ndivisions, 2) == 0) THEN
391 CALL cp_abort(__location__, &
392 "AM.NumberDivisions value must be odd.")
393 END IF
394
395 ! It seems that 'sigmatodisk' parameter is specific to the SIESTA interface.
396 ! Consider setting smeagol_control%aux%sigmatodisk = .FALSE. and remove smeagol_control%aux%storesigma input keyword.
397 IF (smeagol_control%aux%storesigma == 2) THEN
398 smeagol_control%aux%sigmatodisk = .true.
399 ELSE IF (smeagol_control%aux%storesigma == 1) THEN
400 smeagol_control%aux%sigmatodisk = .false.
401 END IF
402
403 ! Bound states
404 ! options:
405 ! bs_add : true => bound states are added
406 ! false=> normal smeagol
407 ! bs_method : 0 => calculate bound states with effective Hamiltonian
408 ! 1 => calculate bound states by adding a small
409 ! imaginary part to the selfenergies
410 IF (smeagol_control%aux%bs_nmid == 0) smeagol_control%aux%bs_nmid = n1/2
411
412 ! SC: Bad practice: real number comparison
413 IF (smeagol_control%aux%SigmaWideBand /= 0.0_dp) smeagol_control%aux%m_svdtolzi = 0.0_dp
414
415 IF (smeagol_control%aux%leadspdos) smeagol_control%aux%leadsdos = .true.
416 IF (smeagol_control%aux%curr_distKEne) smeagol_control%aux%curr_distK = .true.
417 IF (smeagol_control%aux%curr_distK) smeagol_control%aux%curr_dist = .true.
418
419 IF (smeagolglobal_emstt .AND. smeagolglobal_emsttlin .OR. smeagol_control%aux%curr_dist) THEN
420 smeagol_control%aux%emldos2 = .true.
421 IF (smeagol_control%aux%curr_dist) THEN
422 getrhosingleleaddefault = 3
423 ELSE
424 getrhosingleleaddefault = -3
425 END IF
426 ELSE
427 getrhosingleleaddefault = 0
428 END IF
429
430 ! current-induced forces
431 ! The value of 'smeagol_control%emforces' is set in qs_energies().
432 ! Calculation of forces is enabled automatically for certain run_types (energy_force, geo_opt, md) and disabled otherwise.
433 IF (smeagol_control%aux%curr_dist) THEN
434 smeagol_control%emforces = .true.
435 END IF
436
437 IF (.NOT. smeagol_control%aux%isexplicit_nprocs_hs) smeagol_control%aux%nprocs_hs = smeagol_control%aux%nprocs_inverse
438 smeagolglobal_nprocs_hs = smeagol_control%aux%nprocs_hs
439 IF (.NOT. smeagol_control%aux%isexplicit_GetRhoSingleLead) smeagol_control%aux%GetRhoSingleLead = getrhosingleleaddefault
440
441 IF (smeagol_control%aux%MinChannelIndex < 1) smeagol_control%aux%MinChannelIndex = 1
442 IF (smeagol_control%aux%MaxChannelIndex < 1) &
443 smeagol_control%aux%MaxChannelIndex = smeagol_control%aux%MinChannelIndex + 4
444
445 IF (smeagolglobal_emstt .AND. smeagolglobal_emsttlin .AND. smeagol_control%aux%GetRhoSingleLead /= -3) THEN
446 CALL cp_warn(__location__, &
447 "EM.LDOSLeadsProjection should be set to -3. "// &
448 "If SpinTorque and STLinResp are T, otherwise the output "// &
449 "results for the spin transfer torque are incorrect.")
450 END IF
451
452 ! NParallelK
453 nparallelk = smeagol_control%aux%NParallelK
454 IF (mod(para_env%num_pe, nparallelk) /= 0) then
455 CALL cp_warn(__location__, &
456 "EM.ParallelOverKNum must be a divisor of the total number of "// &
457 "MPI processes used in a run; resetting the value of NParallelK.")
458 nparallelkbuf = nparallelk
459 DO nparallelk = nparallelkbuf, 1, -1
460 IF (mod(para_env%num_pe, nparallelk) == 0) EXIT
461 END DO
462 END IF
463
464 IF (nparallelk > para_env%num_pe) THEN
465 CALL cp_warn(__location__, &
466 "EM.ParallelOverKNum can not be larger than the total number of "// &
467 "MPI processes used in a run; resetting the value of NParallelK.")
468 nparallelk = -1
469 END IF
470
471 IF (nparallelk > nk) THEN
472 CALL cp_warn(__location__, &
473 "EM.ParallelOverKNum can not be larger than the total number of "// &
474 "k-points used in a run; resetting the value of NParallelK.")
475 nparallelk = -1
476 END IF
477
478 IF (nparallelk == -1) THEN
479 DO nparallelk = nk, 1, -1
480 IF (mod(para_env%num_pe, nparallelk) == 0) EXIT
481 END DO
482 END IF
483
484 smeagol_control%aux%NParallelK = nparallelk
485
486 IF (smeagol_control%aux%empdosk) smeagol_control%aux%empdos = .true.
487 IF (smeagol_control%aux%emldos2) smeagol_control%aux%emdos = .true.
488 IF (smeagol_control%aux%TransmissionChannels) smeagol_control%aux%emdos = .true.
489 IF (smeagol_control%aux%TransmissionMatrix) smeagol_control%aux%emdos = .true.
490 IF (smeagol_control%aux%curr_dist) smeagol_control%aux%emdos = .true.
491 IF (smeagol_control%aux%empdos) smeagol_control%aux%emdos = .true.
492 IF (smeagol_control%aux%m_skipsvd < 2.0_dp) smeagol_control%aux%m_skipsvd = 10.0_dp
493
494 IF (smeagol_control%aux%CallImpuritySolver) smeagol_control%aux%ComputeImpurityGfMatsubara = .true.
495
496 smeagolglobal_pdosgs = smeagol_control%aux%pdosgs
497 smeagolglobal_skipright = smeagol_control%aux%skipright
498 smeagolglobal_sigmatodisk = smeagol_control%aux%sigmatodisk
499 smeagolglobal_bs_add = smeagol_control%aux%bs_add
500 smeagolglobal_bs_writetrc = smeagol_control%aux%bs_writetrc
501 smeagolglobal_writetk = smeagol_control%aux%writetk
502 smeagolglobal_setene = smeagol_control%aux%setene
503 smeagolglobal_overwritehs = smeagol_control%aux%overwritehs
504 smeagolglobal_transmembed = smeagol_control%aux%transmembed
505 smeagolglobal_writeevsigma = smeagol_control%aux%writeevsigma
506 smeagolglobal_skiptransm = smeagol_control%aux%skiptransm
507 smeagolglobal_deauto = smeagol_control%aux%deauto
508 smeagolglobal_geterrsigma = smeagol_control%aux%geterrsigma
509 smeagolglobal_getsigma = smeagol_control%aux%getsigma
510 smeagolglobal_trcef = smeagol_control%aux%trcef
511 smeagolglobal_rhosetzeroifhzero = smeagol_control%aux%RhoSetZeroIfHZero
512 smeagolglobal_m_usehinv = smeagol_control%aux%m_usehinv
513 smeagolglobal_m_usevinv = smeagol_control%aux%m_usevinv
514 smeagolglobal_m_callsvd = smeagol_control%aux%m_callsvd
515 smeagolglobal_m_complexbands = smeagol_control%aux%m_complexbands
516 smeagolglobal_m_dosleads = smeagol_control%aux%m_dosleads
517 smeagolglobal_leadsdos = smeagol_control%aux%leadsdos
518 smeagolglobal_leadspdos = smeagol_control%aux%leadspdos
519 smeagolglobal_emldos = smeagol_control%aux%emldos
520 smeagolglobal_emldos2 = smeagol_control%aux%emldos2
521 smeagolglobal_curr_distkene = smeagol_control%aux%curr_distKEne
522 smeagolglobal_curr_distk = smeagol_control%aux%curr_distK
523 smeagolglobal_curr_dist = smeagol_control%aux%curr_dist
524 smeagolglobal_curr_disttrc = smeagol_control%aux%curr_distTRC
525 smeagolglobal_em_nonscf = smeagol_control%aux%em_NonSCF
526 smeagolglobal_transmissionrl = smeagol_control%aux%TransmissionRL
527 smeagolglobal_emsttk = smeagol_control%aux%emSTTk
528 smeagolglobal_gett0s = smeagol_control%aux%GetT0S
529 smeagolglobal_transmissionchannels = smeagol_control%aux%TransmissionChannels
530 smeagolglobal_transmissionchannelswfs = smeagol_control%aux%TransmissionChannelsWFS
531 smeagolglobal_transmissionmatrix = smeagol_control%aux%TransmissionMatrix
532 smeagolglobal_transmissionmatrixwfs = smeagol_control%aux%TransmissionMatrixWFS
533 smeagolglobal_transmissionmatrixpdos = smeagol_control%aux%TransmissionMatrixPDOS
534 smeagolglobal_em_endcode1 = smeagol_control%aux%EM_EndCode1
535 smeagolglobal_transmoverk = smeagol_control%aux%TransmOverk
536 smeagolglobal_emdos = smeagol_control%aux%emdos
537 smeagolglobal_empdos = smeagol_control%aux%empdos
538 smeagolglobal_empdosk = smeagol_control%aux%empdosk
539 smeagolglobal_writeiktrck = smeagol_control%aux%WriteIkTrcK
540 smeagolglobal_cbspart = smeagol_control%aux%cbspart
541 smeagolglobal_evec = smeagol_control%aux%evec
542 smeagolglobal_negfon = smeagol_control%aux%negfon
543 smeagolglobal_outinfo = smeagol_control%aux%outinfo
544 smeagolglobal_writenk = smeagol_control%aux%WriteNk
545 smeagolglobal_set_rhoboundary_leads = smeagol_control%aux%Set_RhoBoundary_Leads
546 smeagolglobal_set_rhoboundaryoverlap_leads = smeagol_control%aux%Set_RhoBoundaryOverlap_Leads
547 smeagolglobal_set_hboundary_leads = smeagol_control%aux%Set_HBoundary_Leads
548 smeagolglobal_set_hlr_zero = smeagol_control%aux%Set_HLR_Zero
549 smeagolglobal_skipnonequilibriumrho = smeagol_control%aux%SkipNonEquilibriumRho
550 smeagolglobal_skipequilibriumrho = smeagol_control%aux%SkipEquilibriumRho
551 smeagolglobal_computeimpuritygfmatsubara = smeagol_control%aux%ComputeImpurityGfMatsubara
552 smeagolglobal_printimpuritygfmatsubara = smeagol_control%aux%PrintImpurityGfMatsubara
553 smeagolglobal_callimpuritysolver = smeagol_control%aux%CallImpuritySolver
554 smeagolglobal_emforces = smeagol_control%emforces
555
556 ! emtoptions_local_ilist, emtoptions_local_explicit_ilist
557 IF (.NOT. smeagol_control%aux%isexplicit_Sigma_NxLeft) smeagol_control%aux%Sigma_NxLeft = smeagol_control%aux%Sigma_Nx
558 IF (.NOT. smeagol_control%aux%isexplicit_Sigma_NyLeft) smeagol_control%aux%Sigma_NyLeft = smeagol_control%aux%Sigma_Ny
559 IF (.NOT. smeagol_control%aux%isexplicit_Sigma_NxRight) smeagol_control%aux%Sigma_NxRight = smeagol_control%aux%Sigma_Nx
560 IF (.NOT. smeagol_control%aux%isexplicit_Sigma_NyRight) smeagol_control%aux%Sigma_NyRight = smeagol_control%aux%Sigma_Ny
561
562 smeagolglobal_ndivxy(1) = smeagol_control%aux%Sigma_Nx
563 smeagolglobal_ndivxy(2) = smeagol_control%aux%Sigma_Ny
564 smeagolglobal_ndivxynl(1, 1) = smeagol_control%aux%Sigma_NxLeft
565 smeagolglobal_ndivxynl(1, 2) = smeagol_control%aux%Sigma_NyLeft
566 smeagolglobal_ndivxynl(2, 1) = smeagol_control%aux%Sigma_NxRight
567 smeagolglobal_ndivxynl(2, 2) = smeagol_control%aux%Sigma_NyRight
568
569 CALL setoptionsselfenergies(smeagolglobal_ndivxynl, 2)
570
571 smeagolglobal_maxdepth = smeagol_control%aux%maxdepth
572 smeagolglobal_ndivisions = smeagol_control%aux%ndivisions
573 smeagolglobal_storesigma = smeagol_control%aux%storesigma
574 smeagolglobal_bs_method = smeagol_control%aux%bs_method
575 smeagolglobal_bs_nmid = smeagol_control%aux%bs_nmid
576 smeagolglobal_nrunsigmamax = smeagol_control%aux%NRunSigmaMax
577 smeagolglobal_bsrun = smeagol_control%aux%bsrun
578 smeagolglobal_bsskip = smeagol_control%aux%bsskip
579 smeagolglobal_bseskip = smeagol_control%aux%bseskip
580 smeagolglobal_bssc = smeagol_control%aux%bssc
581 smeagolglobal_inversion_solver = smeagol_control%aux%inversion_solver
582 smeagolglobal_onekp = smeagol_control%aux%onekp
583 smeagolglobal_nbss = smeagol_control%aux%nbss
584 smeagolglobal_nsplit = smeagol_control%aux%nSplit
585 smeagolglobal_transmissionchannelswfsskipene = smeagol_control%aux%TransmissionChannelsWFSSkipEne
586 smeagolglobal_transmissionchannelswfsskipkp = smeagol_control%aux%TransmissionChannelsWFSSkipKP
587 smeagolglobal_transmissionmatrixpdosnwrite = smeagol_control%aux%TransmissionMatrixPDOSNWrite
588 smeagolglobal_transmissionmatrixisetphase = smeagol_control%aux%TransmissionMatrixiSetPhase
589 smeagolglobal_minchannelindex = smeagol_control%aux%MinChannelIndex
590 smeagolglobal_maxchannelindex = smeagol_control%aux%MaxChannelIndex
591 smeagolglobal_n_replace_l = smeagol_control%aux%N_Replace_L
592 smeagolglobal_n_replace_r = smeagol_control%aux%N_Replace_R
593 smeagolglobal_curr_nb1 = smeagol_control%aux%curr_nb1
594 smeagolglobal_curr_nb2 = smeagol_control%aux%curr_nb2
595 smeagolglobal_nparallelk = smeagol_control%aux%NParallelK
596
597 smeagolglobal_getrhosinglelead = smeagol_control%aux%GetRhoSingleLead
598
599 smeagolglobal_sigma_method = smeagol_control%aux%sigma_method
600
601 smeagolglobal_bs_tol = smeagol_control%aux%bs_tol
602 smeagolglobal_bs_min = smeagol_control%aux%bs_min
603 smeagolglobal_hstol = smeagol_control%aux%HSTol
604 smeagolglobal_deltaimag = smeagol_control%aux%deltaimag
605 smeagolglobal_deltaini = smeagol_control%aux%deltaini
606 smeagolglobal_deltatode = smeagol_control%aux%deltatode
607 smeagolglobal_critam = smeagol_control%aux%critam
608 smeagolglobal_setemin = smeagol_control%aux%setemin
609 smeagolglobal_setemax = smeagol_control%aux%setemax
610 smeagolglobal_tolab = smeagol_control%aux%tolab
611 smeagolglobal_weightrho = smeagol_control%aux%weightrho
612 smeagolglobal_thetaleadsl = smeagol_control%aux%ThetaLeadsL
613 smeagolglobal_phileadsl = smeagol_control%aux%PhiLeadsL
614 smeagolglobal_thetaleadsr = smeagol_control%aux%ThetaLeadsR
615 smeagolglobal_phileadsr = smeagol_control%aux%PhiLeadsR
616 smeagolglobal_deltaimagtrc = smeagol_control%aux%deltaimagtrc
617 smeagolglobal_m_tolki = smeagol_control%aux%m_tolki
618 smeagolglobal_m_svdtolmax = smeagol_control%aux%m_svdtolmax
619 smeagolglobal_m_svdtolmin = smeagol_control%aux%m_svdtolmin
620 smeagolglobal_m_dsigmamax = smeagol_control%aux%m_dsigmamax
621 smeagolglobal_m_rnoise = smeagol_control%aux%m_rnoise
622 smeagolglobal_m_skipsvd = smeagol_control%aux%m_skipsvd
623 smeagolglobal_m_svdtolzi = smeagol_control%aux%m_svdtolzi
624 smeagolglobal_sigmawideband = smeagol_control%aux%SigmaWideBand
625 smeagolglobal_emsttkscale = smeagol_control%aux%emSTTkScale
626 smeagolglobal_nlsetzeroratio = smeagol_control%aux%nlSetZeroRatio
627 smeagolglobal_nrsetzeroratio = smeagol_control%aux%nrSetZeroRatio
628 smeagolglobal_curr_fl_l = smeagol_control%aux%curr_fl_L
629 smeagolglobal_curr_fr_l = smeagol_control%aux%curr_fr_L
630 smeagolglobal_curr_fl_r = smeagol_control%aux%curr_fl_R
631 smeagolglobal_curr_fr_r = smeagol_control%aux%curr_fr_R
632
633 ! +++ bound states
634 IF (.NOT. smeagol_control%aux%isexplicit_deltamin) smeagol_control%aux%deltamin = delta
635
636 smeagolglobal_deltamin = smeagol_control%aux%deltamin
637
638 smeagolglobal_tolsigma = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%tolsigma
639 smeagolglobal_trcde = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%trcde
640
641 ! At present read_options_ImpuritySolver() is a dummy libsmeagol.a subroutine,
642 ! so we do not call it
643 !IF (smeagol_control%ComputeImpurityGfMatsubara) THEN
644 ! CALL read_options_ImpuritySolver(CallImpuritySolver,n1)
645 !END IF
646 END IF
647
648 ! *** bound states (re-implemented ReadSpeciesBS() and ReadBSSubSystemBoundaries() subroutines)
649
650 ! bound- state-related global allocatable arrays
651 ALLOCATE (smeagolglobal_deltabss_bs(smeagol_control%aux%nbss))
652 ALLOCATE (smeagolglobal_nebss_bs(smeagol_control%aux%nbss, 2))
653 ALLOCATE (smeagolglobal_orbital_bs(n1))
654
655 ! BS.SubSystemsDelta
656 IF (ALLOCATED(smeagol_control%aux%deltabss_bs)) THEN
657 smeagolglobal_deltabss_bs(:) = smeagol_control%aux%deltabss_bs(:)
658 ELSE
659 smeagolglobal_deltabss_bs(:) = smeagol_control%aux%deltamin
660 END IF
661
662 ! BS.SubSystemsBoundaries
663 IF (ALLOCATED(smeagol_control%aux%nebss_bs)) THEN
664 IF (maxval(smeagol_control%aux%nebss_bs) > n1) THEN
665 CALL integer_to_string(maxval(smeagol_control%aux%nebss_bs), actual_val_str)
666 CALL integer_to_string(n1, expected_val_str)
667 CALL cp_abort(__location__, &
668 "The largest index in BS.SubSystemsBoundaries section ("//trim(actual_val_str)// &
669 ") exceeds the number of atomic orbitals ("//trim(expected_val_str)//").")
670 END IF
671 smeagolglobal_nebss_bs(:, :) = smeagol_control%aux%nebss_bs(:, :)
672 ELSE
673 smeagolglobal_nebss_bs(1, 1) = 1
674 smeagolglobal_nebss_bs(1, 2) = n1/smeagol_control%aux%nbss
675 DO i = 2, smeagol_control%aux%nbss
676 smeagolglobal_nebss_bs(i, 1) = smeagolglobal_nebss_bs(i - 1, 2) + 1
677 smeagolglobal_nebss_bs(i, 2) = i*n1/smeagol_control%aux%nbss
678 END DO
679 smeagolglobal_nebss_bs(smeagol_control%aux%nbss, 2) = n1
680 END IF
681
682 ! AM.AtomListBS
683 IF (ALLOCATED(smeagol_control%aux%atomlist_bs)) THEN
684 IF (maxval(smeagol_control%aux%atomlist_bs) > nblkcols_total) THEN
685 CALL integer_to_string(maxval(smeagol_control%aux%atomlist_bs), actual_val_str)
686 CALL integer_to_string(nblkcols_total, expected_val_str)
687 CALL cp_abort(__location__, &
688 "The largest atomic index in AM.AtomListBS keyword ("//trim(actual_val_str)// &
689 ") exceeds the number of atoms ("//trim(expected_val_str)//") in the extended molecule.")
690 END IF
691
692 smeagolglobal_orbital_bs(:) = .false.
693 DO i = 1, SIZE(smeagol_control%aux%atomlist_bs)
694 iatom = smeagol_control%aux%atomlist_bs(i)
695 smeagolglobal_orbital_bs(col_blk_offset(iatom):col_blk_offset(iatom) + col_blk_size(iatom) - 1) = .true.
696 END DO
697 ELSE
698 smeagolglobal_orbital_bs(:) = .true.
699 END IF
700#else
701 CALL cp_abort(__location__, &
702 "CP2K was compiled with no SMEAGOL support.")
703 mark_used(smeagol_control)
704 mark_used(matrix_s)
705 mark_used(para_env)
706 mark_used(iter)
707 mark_used(istep)
708 mark_used(inicoor)
709 mark_used(iv)
710 mark_used(delta)
711 mark_used(nk)
712 ! local variables
713 mark_used(actual_val_str)
714 mark_used(col_blk_offset)
715 mark_used(col_blk_size)
716 mark_used(expected_val_str)
717 mark_used(getrhosingleleaddefault)
718 mark_used(i)
719 mark_used(iatom)
720 mark_used(n1)
721 mark_used(nblkcols_total)
722 mark_used(nparallelk)
723 mark_used(nparallelkbuf)
724#endif
725
726 CALL timestop(handle)
727 END SUBROUTINE emtrans_options
728
730
731#if defined(__SMEAGOL)
732 IF (ALLOCATED(smeagolglobal_deltabss_bs)) DEALLOCATE (smeagolglobal_deltabss_bs)
733 IF (ALLOCATED(smeagolglobal_nebss_bs)) DEALLOCATE (smeagolglobal_nebss_bs)
734 IF (ALLOCATED(smeagolglobal_orbital_bs)) DEALLOCATE (smeagolglobal_orbital_bs)
735#endif
736
738
739 END MODULE smeagol_emtoptions
740
Handles all functions related to the CELL.
Definition cell_types.F:15
subroutine, public scaled_to_real(r, s, cell)
Transform scaled cell coordinates real coordinates. r=h*s.
Definition cell_types.F:516
subroutine, public dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, my_prow, my_pcol, local_rows, local_cols, proc_row_dist, proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, matrix_type, group)
...
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public smeagol_gridmethod_traditional
integer, parameter, public smeagol_gridmethod_adaptive
integer, parameter, public smeagol_integraltype_gauss_chebyshev
integer, parameter, public smeagol_integraltype_gauss_legendre
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
Interface to the message passing library MPI.
Input control types for NEGF/SMEAGOL transport calculations.
CP2K+SMEAGOL interface.
subroutine, public readoptionsnegf_dft(smeagol_control, ucell, torqueflag, torquelin)
subroutine, public reademtr(smeagol_control, natoms, gamma_negf)
subroutine, public emtrans_deallocate_global_arrays()
subroutine, public emtrans_options(smeagol_control, matrix_s, para_env, iter, istep, inicoor, iv, delta, nk)
Utilities for string manipulations.
subroutine, public integer_to_string(inumber, string)
Converts an integer number to a string. The WRITE statement will return an error message,...
Type defining parameters related to the simulation cell.
Definition cell_types.F:55
stores all the informations relevant to an mpi environment