(git:98357aa)
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-2026 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,
281 ! therefore 'EM.TimeReversal' is also enabled.
282 ! In case of this CP2K+SMEAGOL interface, the default value of 'timereversal' variable is .FALSE.
283 IF (smeagol_control%aux%timereversal) THEN
284 CALL cp_warn(__location__, &
285 "The SMEAGOL keyword 'EM.TimeReversal' is not supported yet.")
286 END IF
287
288 smeagolglobal_timereversal = smeagol_control%aux%timereversal
289 smeagolglobal_trcaddvcdft = smeagol_control%aux%TRCAddVCDFT
290 smeagolglobal_addvgcompensatingisolatedlocalcharges = smeagol_control%aux%AddVgCompensatingIsolatedLocalCharges
291 smeagolglobal_add_rho_gate = smeagol_control%aux%Add_Rho_Gate
292 smeagolglobal_debug_gate = smeagol_control%aux%debug_gate
293 smeagolglobal_empdoskso = smeagol_control%aux%empdoskso
294 smeagolglobal_emtimings = smeagol_control%aux%emtimings
295
296 smeagolglobal_ik_select = smeagol_control%aux%ik_select
297
298 smeagolglobal_q_gate = smeagol_control%aux%Q_gate
299
300 ! readoptsnegf_negfmod_plist
301 IF (.NOT. smeagol_control%aux%isexplicit_RGlxmin) smeagol_control%aux%RGlxmin = 0.0_dp
302 IF (.NOT. smeagol_control%aux%isexplicit_RGlymin) smeagol_control%aux%RGlymin = 0.0_dp
303 IF (.NOT. smeagol_control%aux%isexplicit_RGlzmin) smeagol_control%aux%RGlzmin = 0.0_dp
304 IF (.NOT. smeagol_control%aux%isexplicit_RGlxmax) THEN
305 coord_scaled(:) = [1.0_dp, 0.0_dp, 0.0_dp]
306 CALL scaled_to_real(coord_real, coord_scaled, ucell)
307 smeagol_control%aux%RGlxmax = coord_real(1)
308 END IF
309 IF (.NOT. smeagol_control%aux%isexplicit_RGlymax) THEN
310 coord_scaled(:) = [0.0_dp, 1.0_dp, 0.0_dp]
311 CALL scaled_to_real(coord_real, coord_scaled, ucell)
312 smeagol_control%aux%RGlymax = coord_real(2)
313 END IF
314 IF (.NOT. smeagol_control%aux%isexplicit_RGlzmax) THEN
315 coord_scaled(:) = [0.0_dp, 0.0_dp, 1.0_dp]
316 CALL scaled_to_real(coord_real, coord_scaled, ucell)
317 smeagol_control%aux%RGlzmax = coord_real(3)
318 END IF
319 smeagolglobal_rglxmin = smeagol_control%aux%RGlxmin
320 smeagolglobal_rglxmax = smeagol_control%aux%RGlxmax
321 smeagolglobal_rglymin = smeagol_control%aux%RGlymin
322 smeagolglobal_rglymax = smeagol_control%aux%RGlymax
323 smeagolglobal_rglzmin = smeagol_control%aux%RGlzmin
324 smeagolglobal_rglzmax = smeagol_control%aux%RGlzmax
325
326 ! options to add a Zeeman term to the Hamiltonian
327 smeagolglobal_zeemanbx = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%ZeemanBx
328 smeagolglobal_zeemanby = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%ZeemanBy
329 smeagolglobal_zeemanbz = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%ZeemanBz
330#else
331 CALL cp_abort(__location__, &
332 "CP2K was compiled with no SMEAGOL support.")
333 mark_used(smeagol_control)
334 mark_used(ucell)
335 mark_used(torqueflag)
336 mark_used(torquelin)
337 ! local variables
338 mark_used(coord_real)
339 mark_used(coord_scaled)
340#endif
341
342 CALL timestop(handle)
343 END SUBROUTINE readoptionsnegf_dft
344
345 SUBROUTINE emtrans_options(smeagol_control, matrix_s, para_env, iter, istep, inicoor, iv, delta, nk)
346 TYPE(smeagol_control_type), POINTER :: smeagol_control
347 TYPE(dbcsr_type), INTENT(in), POINTER :: matrix_s
348 TYPE(mp_para_env_type), POINTER :: para_env
349 INTEGER, INTENT(in) :: iter, istep, inicoor, iv
350 REAL(kind=dp), INTENT(in) :: delta
351 INTEGER, INTENT(in) :: nk
352
353 CHARACTER(LEN=*), PARAMETER :: routinen = 'emtrans_options'
354
355 CHARACTER(len=default_string_length) :: actual_val_str, expected_val_str
356 INTEGER :: getrhosingleleaddefault, handle, i, iatom, n1, nblkcols_total, &
357 nparallelk, nparallelkbuf
358 INTEGER, DIMENSION(:), POINTER :: col_blk_offset, col_blk_size
359
360 CALL timeset(routinen, handle)
361
362#if defined(__SMEAGOL)
363 cpassert(ASSOCIATED(smeagol_control%aux))
364
365 CALL dbcsr_get_info(matrix=matrix_s, nblkcols_total=nblkcols_total, &
366 col_blk_size=col_blk_size, col_blk_offset=col_blk_offset)
367 ! number of atomic orbitals.
368 ! The name n1 is meaningless, but it is used in the original SIESTA's version of emtrans_options() subroutine
369 n1 = sum(col_blk_size(1:nblkcols_total))
370
371 IF ((iter == 1) .AND. (istep == inicoor) .AND. (iv == 0)) THEN
372
373 IF (smeagol_control%aux%gridmethod == smeagol_gridmethod_traditional) THEN
374 smeagolglobal_gridmethod = 'Traditional'
375 ELSE IF (smeagol_control%aux%gridmethod == smeagol_gridmethod_adaptive) THEN
376 smeagolglobal_gridmethod = 'Adaptivegrid'
377 ELSE
378 smeagolglobal_gridmethod = 'UNKNOWN'
379 END IF
380
381 IF (smeagol_control%aux%integraltype == smeagol_integraltype_gauss_legendre) THEN
382 smeagolglobal_integraltype = 'gauss-legendre'
383 ELSE IF (smeagol_control%aux%integraltype == smeagol_integraltype_gauss_chebyshev) THEN
384 smeagolglobal_integraltype = 'gauss-chebyshev'
385 ELSE
386 smeagolglobal_integraltype = 'UNKNOWN'
387 END IF
388
389 smeagolglobal_negf_base_comm = para_env%get_handle()
390
391 IF (mod(smeagol_control%aux%ndivisions, 2) == 0) THEN
392 CALL cp_abort(__location__, &
393 "AM.NumberDivisions value must be odd.")
394 END IF
395
396 ! It seems that 'sigmatodisk' parameter is specific to the SIESTA interface.
397 ! Consider setting smeagol_control%aux%sigmatodisk = .FALSE. and remove smeagol_control%aux%storesigma input keyword.
398 IF (smeagol_control%aux%storesigma == 2) THEN
399 smeagol_control%aux%sigmatodisk = .true.
400 ELSE IF (smeagol_control%aux%storesigma == 1) THEN
401 smeagol_control%aux%sigmatodisk = .false.
402 END IF
403
404 ! Bound states
405 ! options:
406 ! bs_add : true => bound states are added
407 ! false=> normal smeagol
408 ! bs_method : 0 => calculate bound states with effective Hamiltonian
409 ! 1 => calculate bound states by adding a small
410 ! imaginary part to the selfenergies
411 IF (smeagol_control%aux%bs_nmid == 0) smeagol_control%aux%bs_nmid = n1/2
412
413 ! SC: Bad practice: real number comparison
414 IF (smeagol_control%aux%SigmaWideBand /= 0.0_dp) smeagol_control%aux%m_svdtolzi = 0.0_dp
415
416 IF (smeagol_control%aux%leadspdos) smeagol_control%aux%leadsdos = .true.
417 IF (smeagol_control%aux%curr_distKEne) smeagol_control%aux%curr_distK = .true.
418 IF (smeagol_control%aux%curr_distK) smeagol_control%aux%curr_dist = .true.
419
420 IF (smeagolglobal_emstt .AND. smeagolglobal_emsttlin .OR. smeagol_control%aux%curr_dist) THEN
421 smeagol_control%aux%emldos2 = .true.
422 IF (smeagol_control%aux%curr_dist) THEN
423 getrhosingleleaddefault = 3
424 ELSE
425 getrhosingleleaddefault = -3
426 END IF
427 ELSE
428 getrhosingleleaddefault = 0
429 END IF
430
431 ! current-induced forces
432 ! The value of 'smeagol_control%emforces' is set in qs_energies().
433 ! Calculation of forces is enabled automatically for certain run_types
434 ! (energy_force, geo_opt, md) and disabled otherwise.
435 IF (smeagol_control%aux%curr_dist) THEN
436 smeagol_control%emforces = .true.
437 END IF
438
439 IF (.NOT. smeagol_control%aux%isexplicit_nprocs_hs) smeagol_control%aux%nprocs_hs = smeagol_control%aux%nprocs_inverse
440 smeagolglobal_nprocs_hs = smeagol_control%aux%nprocs_hs
441 IF (.NOT. smeagol_control%aux%isexplicit_GetRhoSingleLead) smeagol_control%aux%GetRhoSingleLead = getrhosingleleaddefault
442
443 IF (smeagol_control%aux%MinChannelIndex < 1) smeagol_control%aux%MinChannelIndex = 1
444 IF (smeagol_control%aux%MaxChannelIndex < 1) THEN
445 smeagol_control%aux%MaxChannelIndex = smeagol_control%aux%MinChannelIndex + 4
446 END IF
447
448 IF (smeagolglobal_emstt .AND. smeagolglobal_emsttlin .AND. smeagol_control%aux%GetRhoSingleLead /= -3) THEN
449 CALL cp_warn(__location__, &
450 "EM.LDOSLeadsProjection should be set to -3. "// &
451 "If SpinTorque and STLinResp are T, otherwise the output "// &
452 "results for the spin transfer torque are incorrect.")
453 END IF
454
455 ! NParallelK
456 nparallelk = smeagol_control%aux%NParallelK
457 IF (mod(para_env%num_pe, nparallelk) /= 0) then
458 CALL cp_warn(__location__, &
459 "EM.ParallelOverKNum must be a divisor of the total number of "// &
460 "MPI processes used in a run; resetting the value of NParallelK.")
461 nparallelkbuf = nparallelk
462 DO nparallelk = nparallelkbuf, 1, -1
463 IF (mod(para_env%num_pe, nparallelk) == 0) EXIT
464 END DO
465 END IF
466
467 IF (nparallelk > para_env%num_pe) THEN
468 CALL cp_warn(__location__, &
469 "EM.ParallelOverKNum can not be larger than the total number of "// &
470 "MPI processes used in a run; resetting the value of NParallelK.")
471 nparallelk = -1
472 END IF
473
474 IF (nparallelk > nk) THEN
475 CALL cp_warn(__location__, &
476 "EM.ParallelOverKNum can not be larger than the total number of "// &
477 "k-points used in a run; resetting the value of NParallelK.")
478 nparallelk = -1
479 END IF
480
481 IF (nparallelk == -1) THEN
482 DO nparallelk = nk, 1, -1
483 IF (mod(para_env%num_pe, nparallelk) == 0) EXIT
484 END DO
485 END IF
486
487 smeagol_control%aux%NParallelK = nparallelk
488
489 IF (smeagol_control%aux%empdosk) smeagol_control%aux%empdos = .true.
490 IF (smeagol_control%aux%emldos2) smeagol_control%aux%emdos = .true.
491 IF (smeagol_control%aux%TransmissionChannels) smeagol_control%aux%emdos = .true.
492 IF (smeagol_control%aux%TransmissionMatrix) smeagol_control%aux%emdos = .true.
493 IF (smeagol_control%aux%curr_dist) smeagol_control%aux%emdos = .true.
494 IF (smeagol_control%aux%empdos) smeagol_control%aux%emdos = .true.
495 IF (smeagol_control%aux%m_skipsvd < 2.0_dp) smeagol_control%aux%m_skipsvd = 10.0_dp
496
497 IF (smeagol_control%aux%CallImpuritySolver) smeagol_control%aux%ComputeImpurityGfMatsubara = .true.
498
499 smeagolglobal_pdosgs = smeagol_control%aux%pdosgs
500 smeagolglobal_skipright = smeagol_control%aux%skipright
501 smeagolglobal_sigmatodisk = smeagol_control%aux%sigmatodisk
502 smeagolglobal_bs_add = smeagol_control%aux%bs_add
503 smeagolglobal_bs_writetrc = smeagol_control%aux%bs_writetrc
504 smeagolglobal_writetk = smeagol_control%aux%writetk
505 smeagolglobal_setene = smeagol_control%aux%setene
506 smeagolglobal_overwritehs = smeagol_control%aux%overwritehs
507 smeagolglobal_transmembed = smeagol_control%aux%transmembed
508 smeagolglobal_writeevsigma = smeagol_control%aux%writeevsigma
509 smeagolglobal_skiptransm = smeagol_control%aux%skiptransm
510 smeagolglobal_deauto = smeagol_control%aux%deauto
511 smeagolglobal_geterrsigma = smeagol_control%aux%geterrsigma
512 smeagolglobal_getsigma = smeagol_control%aux%getsigma
513 smeagolglobal_trcef = smeagol_control%aux%trcef
514 smeagolglobal_rhosetzeroifhzero = smeagol_control%aux%RhoSetZeroIfHZero
515 smeagolglobal_m_usehinv = smeagol_control%aux%m_usehinv
516 smeagolglobal_m_usevinv = smeagol_control%aux%m_usevinv
517 smeagolglobal_m_callsvd = smeagol_control%aux%m_callsvd
518 smeagolglobal_m_complexbands = smeagol_control%aux%m_complexbands
519 smeagolglobal_m_dosleads = smeagol_control%aux%m_dosleads
520 smeagolglobal_leadsdos = smeagol_control%aux%leadsdos
521 smeagolglobal_leadspdos = smeagol_control%aux%leadspdos
522 smeagolglobal_emldos = smeagol_control%aux%emldos
523 smeagolglobal_emldos2 = smeagol_control%aux%emldos2
524 smeagolglobal_curr_distkene = smeagol_control%aux%curr_distKEne
525 smeagolglobal_curr_distk = smeagol_control%aux%curr_distK
526 smeagolglobal_curr_dist = smeagol_control%aux%curr_dist
527 smeagolglobal_curr_disttrc = smeagol_control%aux%curr_distTRC
528 smeagolglobal_em_nonscf = smeagol_control%aux%em_NonSCF
529 smeagolglobal_transmissionrl = smeagol_control%aux%TransmissionRL
530 smeagolglobal_emsttk = smeagol_control%aux%emSTTk
531 smeagolglobal_gett0s = smeagol_control%aux%GetT0S
532 smeagolglobal_transmissionchannels = smeagol_control%aux%TransmissionChannels
533 smeagolglobal_transmissionchannelswfs = smeagol_control%aux%TransmissionChannelsWFS
534 smeagolglobal_transmissionmatrix = smeagol_control%aux%TransmissionMatrix
535 smeagolglobal_transmissionmatrixwfs = smeagol_control%aux%TransmissionMatrixWFS
536 smeagolglobal_transmissionmatrixpdos = smeagol_control%aux%TransmissionMatrixPDOS
537 smeagolglobal_em_endcode1 = smeagol_control%aux%EM_EndCode1
538 smeagolglobal_transmoverk = smeagol_control%aux%TransmOverk
539 smeagolglobal_emdos = smeagol_control%aux%emdos
540 smeagolglobal_empdos = smeagol_control%aux%empdos
541 smeagolglobal_empdosk = smeagol_control%aux%empdosk
542 smeagolglobal_writeiktrck = smeagol_control%aux%WriteIkTrcK
543 smeagolglobal_cbspart = smeagol_control%aux%cbspart
544 smeagolglobal_evec = smeagol_control%aux%evec
545 smeagolglobal_negfon = smeagol_control%aux%negfon
546 smeagolglobal_outinfo = smeagol_control%aux%outinfo
547 smeagolglobal_writenk = smeagol_control%aux%WriteNk
548 smeagolglobal_set_rhoboundary_leads = smeagol_control%aux%Set_RhoBoundary_Leads
549 smeagolglobal_set_rhoboundaryoverlap_leads = smeagol_control%aux%Set_RhoBoundaryOverlap_Leads
550 smeagolglobal_set_hboundary_leads = smeagol_control%aux%Set_HBoundary_Leads
551 smeagolglobal_set_hlr_zero = smeagol_control%aux%Set_HLR_Zero
552 smeagolglobal_skipnonequilibriumrho = smeagol_control%aux%SkipNonEquilibriumRho
553 smeagolglobal_skipequilibriumrho = smeagol_control%aux%SkipEquilibriumRho
554 smeagolglobal_computeimpuritygfmatsubara = smeagol_control%aux%ComputeImpurityGfMatsubara
555 smeagolglobal_printimpuritygfmatsubara = smeagol_control%aux%PrintImpurityGfMatsubara
556 smeagolglobal_callimpuritysolver = smeagol_control%aux%CallImpuritySolver
557 smeagolglobal_emforces = smeagol_control%emforces
558
559 ! emtoptions_local_ilist, emtoptions_local_explicit_ilist
560 IF (.NOT. smeagol_control%aux%isexplicit_Sigma_NxLeft) smeagol_control%aux%Sigma_NxLeft = smeagol_control%aux%Sigma_Nx
561 IF (.NOT. smeagol_control%aux%isexplicit_Sigma_NyLeft) smeagol_control%aux%Sigma_NyLeft = smeagol_control%aux%Sigma_Ny
562 IF (.NOT. smeagol_control%aux%isexplicit_Sigma_NxRight) smeagol_control%aux%Sigma_NxRight = smeagol_control%aux%Sigma_Nx
563 IF (.NOT. smeagol_control%aux%isexplicit_Sigma_NyRight) smeagol_control%aux%Sigma_NyRight = smeagol_control%aux%Sigma_Ny
564
565 smeagolglobal_ndivxy(1) = smeagol_control%aux%Sigma_Nx
566 smeagolglobal_ndivxy(2) = smeagol_control%aux%Sigma_Ny
567 smeagolglobal_ndivxynl(1, 1) = smeagol_control%aux%Sigma_NxLeft
568 smeagolglobal_ndivxynl(1, 2) = smeagol_control%aux%Sigma_NyLeft
569 smeagolglobal_ndivxynl(2, 1) = smeagol_control%aux%Sigma_NxRight
570 smeagolglobal_ndivxynl(2, 2) = smeagol_control%aux%Sigma_NyRight
571
572 CALL setoptionsselfenergies(smeagolglobal_ndivxynl, 2)
573
574 smeagolglobal_maxdepth = smeagol_control%aux%maxdepth
575 smeagolglobal_ndivisions = smeagol_control%aux%ndivisions
576 smeagolglobal_storesigma = smeagol_control%aux%storesigma
577 smeagolglobal_bs_method = smeagol_control%aux%bs_method
578 smeagolglobal_bs_nmid = smeagol_control%aux%bs_nmid
579 smeagolglobal_nrunsigmamax = smeagol_control%aux%NRunSigmaMax
580 smeagolglobal_bsrun = smeagol_control%aux%bsrun
581 smeagolglobal_bsskip = smeagol_control%aux%bsskip
582 smeagolglobal_bseskip = smeagol_control%aux%bseskip
583 smeagolglobal_bssc = smeagol_control%aux%bssc
584 smeagolglobal_inversion_solver = smeagol_control%aux%inversion_solver
585 smeagolglobal_onekp = smeagol_control%aux%onekp
586 smeagolglobal_nbss = smeagol_control%aux%nbss
587 smeagolglobal_nsplit = smeagol_control%aux%nSplit
588 smeagolglobal_transmissionchannelswfsskipene = smeagol_control%aux%TransmissionChannelsWFSSkipEne
589 smeagolglobal_transmissionchannelswfsskipkp = smeagol_control%aux%TransmissionChannelsWFSSkipKP
590 smeagolglobal_transmissionmatrixpdosnwrite = smeagol_control%aux%TransmissionMatrixPDOSNWrite
591 smeagolglobal_transmissionmatrixisetphase = smeagol_control%aux%TransmissionMatrixiSetPhase
592 smeagolglobal_minchannelindex = smeagol_control%aux%MinChannelIndex
593 smeagolglobal_maxchannelindex = smeagol_control%aux%MaxChannelIndex
594 smeagolglobal_n_replace_l = smeagol_control%aux%N_Replace_L
595 smeagolglobal_n_replace_r = smeagol_control%aux%N_Replace_R
596 smeagolglobal_curr_nb1 = smeagol_control%aux%curr_nb1
597 smeagolglobal_curr_nb2 = smeagol_control%aux%curr_nb2
598 smeagolglobal_nparallelk = smeagol_control%aux%NParallelK
599
600 smeagolglobal_getrhosinglelead = smeagol_control%aux%GetRhoSingleLead
601
602 smeagolglobal_sigma_method = smeagol_control%aux%sigma_method
603
604 smeagolglobal_bs_tol = smeagol_control%aux%bs_tol
605 smeagolglobal_bs_min = smeagol_control%aux%bs_min
606 smeagolglobal_hstol = smeagol_control%aux%HSTol
607 smeagolglobal_deltaimag = smeagol_control%aux%deltaimag
608 smeagolglobal_deltaini = smeagol_control%aux%deltaini
609 smeagolglobal_deltatode = smeagol_control%aux%deltatode
610 smeagolglobal_critam = smeagol_control%aux%critam
611 smeagolglobal_setemin = smeagol_control%aux%setemin
612 smeagolglobal_setemax = smeagol_control%aux%setemax
613 smeagolglobal_tolab = smeagol_control%aux%tolab
614 smeagolglobal_weightrho = smeagol_control%aux%weightrho
615 smeagolglobal_thetaleadsl = smeagol_control%aux%ThetaLeadsL
616 smeagolglobal_phileadsl = smeagol_control%aux%PhiLeadsL
617 smeagolglobal_thetaleadsr = smeagol_control%aux%ThetaLeadsR
618 smeagolglobal_phileadsr = smeagol_control%aux%PhiLeadsR
619 smeagolglobal_deltaimagtrc = smeagol_control%aux%deltaimagtrc
620 smeagolglobal_m_tolki = smeagol_control%aux%m_tolki
621 smeagolglobal_m_svdtolmax = smeagol_control%aux%m_svdtolmax
622 smeagolglobal_m_svdtolmin = smeagol_control%aux%m_svdtolmin
623 smeagolglobal_m_dsigmamax = smeagol_control%aux%m_dsigmamax
624 smeagolglobal_m_rnoise = smeagol_control%aux%m_rnoise
625 smeagolglobal_m_skipsvd = smeagol_control%aux%m_skipsvd
626 smeagolglobal_m_svdtolzi = smeagol_control%aux%m_svdtolzi
627 smeagolglobal_sigmawideband = smeagol_control%aux%SigmaWideBand
628 smeagolglobal_emsttkscale = smeagol_control%aux%emSTTkScale
629 smeagolglobal_nlsetzeroratio = smeagol_control%aux%nlSetZeroRatio
630 smeagolglobal_nrsetzeroratio = smeagol_control%aux%nrSetZeroRatio
631 smeagolglobal_curr_fl_l = smeagol_control%aux%curr_fl_L
632 smeagolglobal_curr_fr_l = smeagol_control%aux%curr_fr_L
633 smeagolglobal_curr_fl_r = smeagol_control%aux%curr_fl_R
634 smeagolglobal_curr_fr_r = smeagol_control%aux%curr_fr_R
635
636 ! +++ bound states
637 IF (.NOT. smeagol_control%aux%isexplicit_deltamin) smeagol_control%aux%deltamin = delta
638
639 smeagolglobal_deltamin = smeagol_control%aux%deltamin
640
641 smeagolglobal_tolsigma = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%tolsigma
642 smeagolglobal_trcde = smeagol_control%to_smeagol_energy_units*smeagol_control%aux%trcde
643
644 ! At present read_options_ImpuritySolver() is a dummy libsmeagol.a subroutine,
645 ! so we do not call it
646 !IF (smeagol_control%ComputeImpurityGfMatsubara) THEN
647 ! CALL read_options_ImpuritySolver(CallImpuritySolver,n1)
648 !END IF
649 END IF
650
651 ! *** bound states (re-implemented ReadSpeciesBS() and ReadBSSubSystemBoundaries() subroutines)
652
653 ! bound- state-related global allocatable arrays
654 ALLOCATE (smeagolglobal_deltabss_bs(smeagol_control%aux%nbss))
655 ALLOCATE (smeagolglobal_nebss_bs(smeagol_control%aux%nbss, 2))
656 ALLOCATE (smeagolglobal_orbital_bs(n1))
657
658 ! BS.SubSystemsDelta
659 IF (ALLOCATED(smeagol_control%aux%deltabss_bs)) THEN
660 smeagolglobal_deltabss_bs(:) = smeagol_control%aux%deltabss_bs(:)
661 ELSE
662 smeagolglobal_deltabss_bs(:) = smeagol_control%aux%deltamin
663 END IF
664
665 ! BS.SubSystemsBoundaries
666 IF (ALLOCATED(smeagol_control%aux%nebss_bs)) THEN
667 IF (maxval(smeagol_control%aux%nebss_bs) > n1) THEN
668 CALL integer_to_string(maxval(smeagol_control%aux%nebss_bs), actual_val_str)
669 CALL integer_to_string(n1, expected_val_str)
670 CALL cp_abort(__location__, &
671 "The largest index in BS.SubSystemsBoundaries section ("//trim(actual_val_str)// &
672 ") exceeds the number of atomic orbitals ("//trim(expected_val_str)//").")
673 END IF
674 smeagolglobal_nebss_bs(:, :) = smeagol_control%aux%nebss_bs(:, :)
675 ELSE
676 smeagolglobal_nebss_bs(1, 1) = 1
677 smeagolglobal_nebss_bs(1, 2) = n1/smeagol_control%aux%nbss
678 DO i = 2, smeagol_control%aux%nbss
679 smeagolglobal_nebss_bs(i, 1) = smeagolglobal_nebss_bs(i - 1, 2) + 1
680 smeagolglobal_nebss_bs(i, 2) = i*n1/smeagol_control%aux%nbss
681 END DO
682 smeagolglobal_nebss_bs(smeagol_control%aux%nbss, 2) = n1
683 END IF
684
685 ! AM.AtomListBS
686 IF (ALLOCATED(smeagol_control%aux%atomlist_bs)) THEN
687 IF (maxval(smeagol_control%aux%atomlist_bs) > nblkcols_total) THEN
688 CALL integer_to_string(maxval(smeagol_control%aux%atomlist_bs), actual_val_str)
689 CALL integer_to_string(nblkcols_total, expected_val_str)
690 CALL cp_abort(__location__, &
691 "The largest atomic index in AM.AtomListBS keyword ("//trim(actual_val_str)// &
692 ") exceeds the number of atoms ("//trim(expected_val_str)//") in the extended molecule.")
693 END IF
694
695 smeagolglobal_orbital_bs(:) = .false.
696 DO i = 1, SIZE(smeagol_control%aux%atomlist_bs)
697 iatom = smeagol_control%aux%atomlist_bs(i)
698 smeagolglobal_orbital_bs(col_blk_offset(iatom):col_blk_offset(iatom) + col_blk_size(iatom) - 1) = .true.
699 END DO
700 ELSE
701 smeagolglobal_orbital_bs(:) = .true.
702 END IF
703#else
704 CALL cp_abort(__location__, &
705 "CP2K was compiled with no SMEAGOL support.")
706 mark_used(smeagol_control)
707 mark_used(matrix_s)
708 mark_used(para_env)
709 mark_used(iter)
710 mark_used(istep)
711 mark_used(inicoor)
712 mark_used(iv)
713 mark_used(delta)
714 mark_used(nk)
715 ! local variables
716 mark_used(actual_val_str)
717 mark_used(col_blk_offset)
718 mark_used(col_blk_size)
719 mark_used(expected_val_str)
720 mark_used(getrhosingleleaddefault)
721 mark_used(i)
722 mark_used(iatom)
723 mark_used(n1)
724 mark_used(nblkcols_total)
725 mark_used(nparallelk)
726 mark_used(nparallelkbuf)
727#endif
728
729 CALL timestop(handle)
730 END SUBROUTINE emtrans_options
731
733
734#if defined(__SMEAGOL)
735 IF (ALLOCATED(smeagolglobal_deltabss_bs)) DEALLOCATE (smeagolglobal_deltabss_bs)
736 IF (ALLOCATED(smeagolglobal_nebss_bs)) DEALLOCATE (smeagolglobal_nebss_bs)
737 IF (ALLOCATED(smeagolglobal_orbital_bs)) DEALLOCATE (smeagolglobal_orbital_bs)
738#endif
739
741
742 END MODULE smeagol_emtoptions
743
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:625
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:60
stores all the informations relevant to an mpi environment