31#include "./base/base_uses.f90"
36 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'smeagol_control_types'
45 LOGICAL :: smeagol_enabled = .false.
51 LOGICAL :: do_regtest = .false.
54 LOGICAL :: emforces = .false.
57 REAL(kind=
dp) :: to_smeagol_energy_units = 2.0_dp
60 INTEGER,
DIMENSION(2) :: n_cell_images = (/1, 1/)
66 CHARACTER(len=20) :: project_name =
"PROJECT_NAME"
68 TYPE(smeagol_aux_control_type),
POINTER :: aux => null()
76 TYPE smeagol_aux_control_type
83 INTEGER :: md_iter_level = -1
85 INTEGER :: md_first_step = 0
88 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: deltabss_bs
90 INTEGER,
ALLOCATABLE,
DIMENSION(:, :) :: nebss_bs
92 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: atomlist_bs
94 REAL(kind=
dp) :: temperature = 300.0_dp/
kelvin
97 LOGICAL :: trcoeff = .false.
98 LOGICAL :: skiplast = .false.
99 LOGICAL :: calciets = .false.
101 LOGICAL :: isexplicit_maxr = .false.
103 LOGICAL :: dsigmade = .false.
104 LOGICAL :: calcmpsh = .false.
106 LOGICAL :: coopcalculate = .false.
108 INTEGER :: nenergr = 288
109 INTEGER :: nenergic = 32
110 INTEGER :: nenergil = 16
111 INTEGER :: npoles = 16
112 INTEGER :: spincl = 0
113 INTEGER :: atmlvcte = 1
114 INTEGER :: atmrvcte = -1
115 INTEGER :: nslices = 1
116 INTEGER :: nlinmix = 1
117 INTEGER :: tmdskip = 0
118 INTEGER :: tmdsampling = 1
120 INTEGER :: nenet = 100
121 INTEGER :: rmoinit = 1
122 INTEGER :: rmolast = 1
123 INTEGER :: rorbinit = 1
124 INTEGER :: rorblast = 1
126 INTEGER :: coopnumberofbonds = 0
128 REAL(kind=
dp) :: delta = 1.0e-10_dp
130 REAL(kind=
dp) :: maxkappa = 0.0_dp
132 REAL(kind=
dp) :: vbias = 0.0_dp*0.5_dp
133 REAL(kind=
dp) :: energlb = -7.0_dp*0.5_dp
134 REAL(kind=
dp) :: minl = 0.0_dp
136 REAL(kind=
dp) :: maxr = 0.0_dp
138 REAL(kind=
dp) :: tenergi = -0.3675_dp*0.5_dp
139 REAL(kind=
dp) :: tenergf = -0.3675_dp*0.5_dp
140 REAL(kind=
dp) :: vgate = 0.0_dp*0.5_dp
142 REAL(kind=
dp) :: zgater = 0.0_dp
143 REAL(kind=
dp) :: zgatel = 0.0_dp
144 REAL(kind=
dp) :: alphag = 1.0_dp
147 LOGICAL :: timereversal = .false.
148 LOGICAL :: trcaddvcdft = .false.
149 LOGICAL :: addvgcompensatingisolatedlocalcharges = .true.
150 LOGICAL :: add_rho_gate = .false.
151 LOGICAL :: debug_gate = .false.
152 LOGICAL :: empdoskso = .false.
153 LOGICAL :: emtimings = .false.
155 LOGICAL :: isexplicit_rglxmin = .false.
156 LOGICAL :: isexplicit_rglxmax = .false.
157 LOGICAL :: isexplicit_rglymin = .false.
158 LOGICAL :: isexplicit_rglymax = .false.
159 LOGICAL :: isexplicit_rglzmin = .false.
160 LOGICAL :: isexplicit_rglzmax = .false.
162 INTEGER :: ik_select = 0
164 REAL(kind=
dp) :: q_gate = 0.0_dp
166 REAL(kind=
dp) :: rglxmin = 0.0_dp
167 REAL(kind=
dp) :: rglxmax = 0.0_dp
168 REAL(kind=
dp) :: rglymin = 0.0_dp
169 REAL(kind=
dp) :: rglymax = 0.0_dp
170 REAL(kind=
dp) :: rglzmin = 0.0_dp
171 REAL(kind=
dp) :: rglzmax = 0.0_dp
173 REAL(kind=
dp) :: zeemanbx = 0.0_dp*0.5_dp
174 REAL(kind=
dp) :: zeemanby = 0.0_dp*0.5_dp
175 REAL(kind=
dp) :: zeemanbz = 0.0_dp*0.5_dp
181 LOGICAL :: pdosgs = .false.
182 LOGICAL :: skipright = .false.
183 LOGICAL :: sigmatodisk = .false.
184 LOGICAL :: bs_add = .false.
185 LOGICAL :: bs_writetrc = .false.
186 LOGICAL :: writetk = .false.
187 LOGICAL :: setene = .false.
188 LOGICAL :: overwritehs = .true.
189 LOGICAL :: transmembed = .true.
190 LOGICAL :: writeevsigma = .false.
191 LOGICAL :: skiptransm = .false.
192 LOGICAL :: deauto = .false.
193 LOGICAL :: geterrsigma = .false.
194 LOGICAL :: getsigma = .false.
195 LOGICAL :: trcef = .true.
196 LOGICAL :: rhosetzeroifhzero = .false.
197 LOGICAL :: m_usehinv = .false.
198 LOGICAL :: m_usevinv = .false.
199 LOGICAL :: m_callsvd = .false.
200 LOGICAL :: m_complexbands = .false.
201 LOGICAL :: m_dosleads = .false.
202 LOGICAL :: leadsdos = .false.
203 LOGICAL :: leadspdos = .false.
204 LOGICAL :: emldos = .false.
205 LOGICAL :: emldos2 = .false.
206 LOGICAL :: curr_distkene = .false.
207 LOGICAL :: curr_distk = .false.
208 LOGICAL :: curr_dist = .false.
209 LOGICAL :: curr_disttrc = .false.
210 LOGICAL :: em_nonscf = .false.
211 LOGICAL :: transmissionrl = .false.
212 LOGICAL :: emsttk = .false.
213 LOGICAL :: gett0s = .false.
214 LOGICAL :: transmissionchannels = .false.
215 LOGICAL :: transmissionchannelswfs = .false.
216 LOGICAL :: transmissionmatrix = .false.
217 LOGICAL :: transmissionmatrixwfs = .false.
218 LOGICAL :: transmissionmatrixpdos = .false.
219 LOGICAL :: em_endcode1 = .false.
220 LOGICAL :: transmoverk = .false.
221 LOGICAL :: emdos = .false.
222 LOGICAL :: empdos = .false.
223 LOGICAL :: empdosk = .false.
224 LOGICAL :: writeiktrck = .false.
225 LOGICAL :: cbspart = .false.
226 LOGICAL :: evec = .false.
227 LOGICAL :: negfon = .false.
228 LOGICAL :: outinfo = .false.
229 LOGICAL :: writenk = .false.
230 LOGICAL :: set_rhoboundary_leads = .true.
231 LOGICAL :: set_rhoboundaryoverlap_leads = .true.
232 LOGICAL :: set_hboundary_leads = .true.
233 LOGICAL :: set_hlr_zero = .true.
234 LOGICAL :: skipnonequilibriumrho = .false.
235 LOGICAL :: skipequilibriumrho = .false.
236 LOGICAL :: computeimpuritygfmatsubara = .false.
237 LOGICAL :: printimpuritygfmatsubara = .false.
238 LOGICAL :: callimpuritysolver = .false.
240 LOGICAL :: isexplicit_nprocs_hs = .false.
241 LOGICAL :: isexplicit_sigma_nxleft = .false.
242 LOGICAL :: isexplicit_sigma_nyleft = .false.
243 LOGICAL :: isexplicit_sigma_nxright = .false.
244 LOGICAL :: isexplicit_sigma_nyright = .false.
246 LOGICAL :: isexplicit_getrhosinglelead = .false.
248 LOGICAL :: isexplicit_deltamin = .false.
250 INTEGER :: nprocs_inverse = 1
251 INTEGER :: sigma_nx = 1
252 INTEGER :: sigma_ny = 1
254 INTEGER :: nprocs_hs = 1
255 INTEGER :: sigma_nxleft = 1
256 INTEGER :: sigma_nyleft = 1
257 INTEGER :: sigma_nxright = 1
258 INTEGER :: sigma_nyright = 1
260 INTEGER :: maxdepth = 15
261 INTEGER :: ndivisions = 9
262 INTEGER :: storesigma = 0
263 INTEGER :: bs_method = 0
264 INTEGER :: bs_nmid = 0
265 INTEGER :: nrunsigmamax = 3
267 INTEGER :: bsskip = 1
268 INTEGER :: bseskip = 1
270 INTEGER :: inversion_solver = 1
273 INTEGER :: nsplit = 0
274 INTEGER :: transmissionchannelswfsskipene = 100
275 INTEGER :: transmissionchannelswfsskipkp = 100
276 INTEGER :: transmissionmatrixpdosnwrite = 20
277 INTEGER :: transmissionmatrixisetphase = -1
278 INTEGER :: minchannelindex = 1
279 INTEGER :: maxchannelindex = 0
280 INTEGER :: n_replace_l = 1
281 INTEGER :: n_replace_r = 1
282 INTEGER :: curr_nb1 = -1
283 INTEGER :: curr_nb2 = -1
284 INTEGER :: nparallelk = 1
286 INTEGER :: getrhosinglelead = 0
288 INTEGER :: sigma_method = 1
290 REAL(kind=
dp) :: bs_tol = 1.0e-05_dp
291 REAL(kind=
dp) :: bs_min = 0.0_dp
292 REAL(kind=
dp) :: hstol = 1.0e-10_dp
293 REAL(kind=
dp) :: deltaimag = 0.0_dp
294 REAL(kind=
dp) :: deltaini = 1.0e-03_dp
295 REAL(kind=
dp) :: deltatode = 1.5_dp
296 REAL(kind=
dp) :: critam = 2.0_dp
297 REAL(kind=
dp) :: setemin = -1.0_dp
298 REAL(kind=
dp) :: setemax = 1.0_dp
299 REAL(kind=
dp) :: tolab = 1.0e-06_dp
300 REAL(kind=
dp) :: weightrho = 0.5_dp
301 REAL(kind=
dp) :: thetaleadsl = 0.0_dp
302 REAL(kind=
dp) :: phileadsl = 0.0_dp
303 REAL(kind=
dp) :: thetaleadsr = 0.0_dp
304 REAL(kind=
dp) :: phileadsr = 0.0_dp
305 REAL(kind=
dp) :: deltaimagtrc = 0.0_dp
306 REAL(kind=
dp) :: m_tolki = 1.0e-06_dp
307 REAL(kind=
dp) :: m_svdtolmax = 5.0e-12_dp
308 REAL(kind=
dp) :: m_svdtolmin = 1.0e-15_dp
309 REAL(kind=
dp) :: m_dsigmamax = 1.0e-05_dp
310 REAL(kind=
dp) :: m_rnoise = 1.0_dp
311 REAL(kind=
dp) :: m_skipsvd = 1.0e+03_dp
312 REAL(kind=
dp) :: m_svdtolzi = 1.0e-08_dp
313 REAL(kind=
dp) :: sigmawideband = 0.0_dp
314 REAL(kind=
dp) :: emsttkscale = 1.0_dp
315 REAL(kind=
dp) :: nlsetzeroratio = 1.0_dp
316 REAL(kind=
dp) :: nrsetzeroratio = 1.0_dp
317 REAL(kind=
dp) :: curr_fl_l = 1.0_dp
318 REAL(kind=
dp) :: curr_fr_l = 0.0_dp
319 REAL(kind=
dp) :: curr_fl_r = 0.0_dp
320 REAL(kind=
dp) :: curr_fr_r = 1.0_dp
322 REAL(kind=
dp) :: deltamin = 0.0_dp
324 REAL(kind=
dp) :: tolsigma = 1.0e-05_dp*0.5_dp
325 REAL(kind=
dp) :: trcde = 0.0_dp*0.5_dp
328 REAL(kind=
dp) :: hartreeleadsleft = 0.0_dp
329 REAL(kind=
dp) :: hartreeleadsright = 0.0_dp
330 REAL(kind=
dp) :: hartreeleadsbottom = 0.0_dp*0.5_dp
331 LOGICAL :: isexplicit_hartreeleadsbottom = .false.
333 END TYPE smeagol_aux_control_type
343 CHARACTER(len=*),
PARAMETER :: routinen =
'smeagol_control_create'
347 cpassert(.NOT.
ASSOCIATED(smeagol_control))
348 CALL timeset(routinen, handle)
350 ALLOCATE (smeagol_control)
351#if defined(__SMEAGOL)
352 ALLOCATE (smeagol_control%aux)
354 NULLIFY (smeagol_control%aux)
357 CALL timestop(handle)
367 CHARACTER(len=*),
PARAMETER :: routinen =
'smeagol_control_release'
371 CALL timeset(routinen, handle)
373 IF (
ASSOCIATED(smeagol_control))
THEN
374 IF (
ASSOCIATED(smeagol_control%aux))
THEN
375 IF (
ALLOCATED(smeagol_control%aux%nebss_bs))
DEALLOCATE (smeagol_control%aux%nebss_bs)
376 IF (
ALLOCATED(smeagol_control%aux%deltabss_bs))
DEALLOCATE (smeagol_control%aux%deltabss_bs)
377 IF (
ALLOCATED(smeagol_control%aux%atomlist_bs))
DEALLOCATE (smeagol_control%aux%atomlist_bs)
379 DEALLOCATE (smeagol_control%aux)
381 DEALLOCATE (smeagol_control)
384 CALL timestop(handle)
396 CHARACTER(len=*),
PARAMETER :: routinen =
'read_smeagol_control'
398 CHARACTER(len=default_string_length) :: project_name
400 INTEGER,
DIMENSION(:),
POINTER :: n_cell_images_ptr
402 CALL timeset(routinen, handle)
404 CALL section_vals_val_get(smeagol_section,
"_SECTION_PARAMETERS_", l_val=smeagol_control%smeagol_enabled)
408 smeagol_control%project_name = project_name
409 IF (smeagol_control%smeagol_enabled .AND. smeagol_control%project_name /= project_name)
THEN
410 CALL cp_warn(__location__, &
411 "SMEAGOL limits the length of the project name by 20 characters. "// &
412 "The project name is truncated to '"//trim(smeagol_control%project_name)//
"'.")
418#if !defined(__SMEAGOL)
420 CALL cp_abort(__location__, &
421 "CP2K was compiled with no SMEAGOL support. SMEAGOL RUN_TYPE EMTransport is not available")
430 NULLIFY (n_cell_images_ptr)
432 smeagol_control%n_cell_images(1:2) = n_cell_images_ptr(1:2)
437 IF (
ASSOCIATED(smeagol_control%aux))
CALL read_smeagol_aux_control(smeagol_control%aux, smeagol_section)
439 CALL timestop(handle)
447 SUBROUTINE read_smeagol_aux_control(smeagol_control, smeagol_section)
448 TYPE(smeagol_aux_control_type),
POINTER :: smeagol_control
451 CHARACTER(len=*),
PARAMETER :: routinen =
'read_smeagol_aux_control'
453 CHARACTER(len=default_string_length) :: nvals_str
454 INTEGER :: handle, i, n, nrep, n_unique
455 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: ivec, indices
456 INTEGER,
DIMENSION(:),
POINTER :: iptr
457 LOGICAL :: is_explicit, do_abort
458 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rptr
461 CALL timeset(routinen, handle)
463 smeagol_control%md_iter_level = -1
464 smeagol_control%md_first_step = 0
477 CALL section_vals_val_get(smeagol_section,
"EM.COOPCalculate", l_val=smeagol_control%COOPCalculate)
496 CALL section_vals_val_get(smeagol_section,
"EM.COOPNumberOfBonds", i_val=smeagol_control%COOPNumberOfBonds)
507 r_val=smeagol_control%maxR, &
508 explicit=smeagol_control%isexplicit_maxR)
517 CALL section_vals_val_get(smeagol_section,
"EM.TimeReversal", l_val=smeagol_control%timereversal)
519 CALL section_vals_val_get(smeagol_section,
"EM.AddVgIsolatedLocalCharges", l_val=smeagol_control%AddVgCompensatingIsolated&
534 r_val=smeagol_control%RGlxmin, &
535 explicit=smeagol_control%isexplicit_RGlxmin)
537 r_val=smeagol_control%RGlxmax, &
538 explicit=smeagol_control%isexplicit_RGlxmax)
540 r_val=smeagol_control%RGlymin, &
541 explicit=smeagol_control%isexplicit_RGlymin)
543 r_val=smeagol_control%RGlymax, &
544 explicit=smeagol_control%isexplicit_RGlymax)
546 r_val=smeagol_control%RGlzmin, &
547 explicit=smeagol_control%isexplicit_RGlzmin)
549 r_val=smeagol_control%RGlzmax, &
550 explicit=smeagol_control%isexplicit_RGlzmax)
558 CALL section_vals_val_get(smeagol_section,
"TypeOfIntegral", i_val=smeagol_control%integraltype)
563 CALL section_vals_val_get(smeagol_section,
"Sigma.WriteToDisk", l_val=smeagol_control%sigmatodisk)
565 CALL section_vals_val_get(smeagol_section,
"BS.WriteTransmission", l_val=smeagol_control%bs_writetrc)
566 CALL section_vals_val_get(smeagol_section,
"Current.WriteTransmission", l_val=smeagol_control%writetk)
568 CALL section_vals_val_get(smeagol_section,
"Sigma.OverwriteHS", l_val=smeagol_control%overwritehs)
569 CALL section_vals_val_get(smeagol_section,
"TransmissionEmbed", l_val=smeagol_control%transmembed)
571 CALL section_vals_val_get(smeagol_section,
"Sigma.SkipTransmission", l_val=smeagol_control%skiptransm)
573 CALL section_vals_val_get(smeagol_section,
"Sigma.CheckAccuracy", l_val=smeagol_control%geterrsigma)
576 CALL section_vals_val_get(smeagol_section,
"EM.SetRhoZeroIfHZero", l_val=smeagol_control%RhoSetZeroIfHZero)
580 CALL section_vals_val_get(smeagol_section,
"Sigma.ComplexBands", l_val=smeagol_control%m_complexbands)
586 CALL section_vals_val_get(smeagol_section,
"EM.CurrentDensityK_Ene", l_val=smeagol_control%curr_distKEne)
587 CALL section_vals_val_get(smeagol_section,
"EM.CurrentDensityK", l_val=smeagol_control%curr_distK)
588 CALL section_vals_val_get(smeagol_section,
"EM.CurrentDensity", l_val=smeagol_control%curr_dist)
589 CALL section_vals_val_get(smeagol_section,
"EM.CurrentDensityTRC", l_val=smeagol_control%curr_distTRC)
590 CALL section_vals_val_get(smeagol_section,
"EM.NonSelfConsistentRun", l_val=smeagol_control%em_NonSCF)
591 CALL section_vals_val_get(smeagol_section,
"EM.TransmissionRL", l_val=smeagol_control%TransmissionRL)
593 CALL section_vals_val_get(smeagol_section,
"EM.TRCSpinComponents", l_val=smeagol_control%GetT0S)
594 CALL section_vals_val_get(smeagol_section,
"EM.TRCChannels", l_val=smeagol_control%TransmissionChannels)
595 CALL section_vals_val_get(smeagol_section,
"EM.TRCChannelsWFS", l_val=smeagol_control%TransmissionChannelsWFS)
596 CALL section_vals_val_get(smeagol_section,
"EM.TMatrix", l_val=smeagol_control%TransmissionMatrix)
597 CALL section_vals_val_get(smeagol_section,
"EM.TMatrixWFS", l_val=smeagol_control%TransmissionMatrixWFS)
598 CALL section_vals_val_get(smeagol_section,
"EM.TMatrixPDOS", l_val=smeagol_control%TransmissionMatrixPDOS)
600 CALL section_vals_val_get(smeagol_section,
"TransmissionOverK", l_val=smeagol_control%TransmOverk)
604 CALL section_vals_val_get(smeagol_section,
"TRC.TrcOverKWriteIk", l_val=smeagol_control%WriteIkTrcK)
610 CALL section_vals_val_get(smeagol_section,
"EM.SetRhoBoundaryFromLeads", l_val=smeagol_control%Set_RhoBoundary_Leads)
612 & l_val=smeagol_control%Set_RhoBoundaryOverlap_Leads)
613 CALL section_vals_val_get(smeagol_section,
"EM.SetHBoundaryFromLeads", l_val=smeagol_control%Set_HBoundary_Leads)
615 CALL section_vals_val_get(smeagol_section,
"EM.SkipNonEquilibriumRho", l_val=smeagol_control%SkipNonEquilibriumRho)
616 CALL section_vals_val_get(smeagol_section,
"EM.SkipEquilibriumRho", l_val=smeagol_control%SkipEquilibriumRho)
617 CALL section_vals_val_get(smeagol_section,
"EM.ComputeImpurityGfMatsubara", l_val=smeagol_control%ComputeImpurityGfMatsuba&
619 CALL section_vals_val_get(smeagol_section,
"EM.PrintImpurityGfMatsubara", l_val=smeagol_control%PrintImpurityGfMatsubara)
620 CALL section_vals_val_get(smeagol_section,
"EM.CallImpuritySolver", l_val=smeagol_control%CallImpuritySolver)
623 CALL section_vals_val_get(smeagol_section,
"EM.NProcessorsInverse", i_val=smeagol_control%nprocs_inverse)
628 i_val=smeagol_control%nprocs_hs, &
629 explicit=smeagol_control%isexplicit_nprocs_hs)
631 i_val=smeagol_control%Sigma_NxLeft, &
632 explicit=smeagol_control%isexplicit_Sigma_NxLeft)
634 i_val=smeagol_control%Sigma_NyLeft, &
635 explicit=smeagol_control%isexplicit_Sigma_NyLeft)
637 i_val=smeagol_control%Sigma_NxRight, &
638 explicit=smeagol_control%isexplicit_Sigma_NxRight)
640 i_val=smeagol_control%Sigma_NyRight, &
641 explicit=smeagol_control%isexplicit_Sigma_NyRight)
644 CALL section_vals_val_get(smeagol_section,
"AM.NumberDivisions", i_val=smeagol_control%ndivisions)
648 CALL section_vals_val_get(smeagol_section,
"Sigma.NRerunSigmaMax", i_val=smeagol_control%NRunSigmaMax)
653 CALL section_vals_val_get(smeagol_section,
"EM.InverseSolver", i_val=smeagol_control%inversion_solver)
656 CALL section_vals_val_get(smeagol_section,
"EM.TRCSpinComponentsOribalSplit", i_val=smeagol_control%nSplit)
657 CALL section_vals_val_get(smeagol_section,
"EM.TRCChannelsWFS_SkipEne", i_val=smeagol_control%TransmissionChannelsWFSSkipE&
659 CALL section_vals_val_get(smeagol_section,
"EM.TRCChannelsWFS_SkipKP", i_val=smeagol_control%TransmissionChannelsWFSSkipKP)
660 CALL section_vals_val_get(smeagol_section,
"EM.TMatrixPDOSNWrite", i_val=smeagol_control%TransmissionMatrixPDOSNWrite)
661 CALL section_vals_val_get(smeagol_section,
"EM.TMatrixSetPhaseIndex", i_val=smeagol_control%TransmissionMatrixiSetPhase)
662 CALL section_vals_val_get(smeagol_section,
"EM.TRCMinChannelIndex", i_val=smeagol_control%MinChannelIndex)
663 CALL section_vals_val_get(smeagol_section,
"EM.TRCMaxChannelIndex", i_val=smeagol_control%MaxChannelIndex)
664 CALL section_vals_val_get(smeagol_section,
"EM.NSetHBoundaryFromLeadsL", i_val=smeagol_control%N_Replace_L)
665 CALL section_vals_val_get(smeagol_section,
"EM.NSetHBoundaryFromLeadsR", i_val=smeagol_control%N_Replace_R)
666 CALL section_vals_val_get(smeagol_section,
"EM.CurrentFluxOrbital1", i_val=smeagol_control%curr_nb1)
667 CALL section_vals_val_get(smeagol_section,
"EM.CurrentFluxOrbital2", i_val=smeagol_control%curr_nb2)
668 CALL section_vals_val_get(smeagol_section,
"EM.ParallelOverKNum", i_val=smeagol_control%NParallelK)
671 i_val=smeagol_control%GetRhoSingleLead, &
672 explicit=smeagol_control%isexplicit_GetRhoSingleLead)
688 CALL section_vals_val_get(smeagol_section,
"EM.RotateSpinLeadsLeft.Theta", r_val=smeagol_control%ThetaLeadsL )
689 CALL section_vals_val_get(smeagol_section,
"EM.RotateSpinLeadsLeft.Phi", r_val=smeagol_control%PhiLeadsL )
690 CALL section_vals_val_get(smeagol_section,
"EM.RotateSpinLeadsRight.Theta", r_val=smeagol_control%ThetaLeadsR )
691 CALL section_vals_val_get(smeagol_section,
"EM.RotateSpinLeadsRight.Phi", r_val=smeagol_control%PhiLeadsR )
692 CALL section_vals_val_get(smeagol_section,
"DeltaTransmission", r_val=smeagol_control%deltaimagtrc )
699 CALL section_vals_val_get(smeagol_section,
"Sigma.SVDTolZero", r_val=smeagol_control%m_svdtolzi )
700 CALL section_vals_val_get(smeagol_section,
"Sigma.WideBandImag", r_val=smeagol_control%SigmaWideBand )
701 CALL section_vals_val_get(smeagol_section,
"EM.SpinTorqueKScale", r_val=smeagol_control%emSTTkScale )
702 CALL section_vals_val_get(smeagol_section,
"EM.SetHLRZeroRatioLeft", r_val=smeagol_control%nlSetZeroRatio )
703 CALL section_vals_val_get(smeagol_section,
"EM.SetHLRZeroRatioRight", r_val=smeagol_control%nrSetZeroRatio )
704 CALL section_vals_val_get(smeagol_section,
"EM.CurrentFluxFL_L", r_val=smeagol_control%curr_fl_L )
705 CALL section_vals_val_get(smeagol_section,
"EM.CurrentFluxFR_L", r_val=smeagol_control%curr_fr_L )
706 CALL section_vals_val_get(smeagol_section,
"EM.CurrentFluxFL_R", r_val=smeagol_control%curr_fl_R )
707 CALL section_vals_val_get(smeagol_section,
"EM.CurrentFluxFR_R", r_val=smeagol_control%curr_fr_R )
710 r_val=smeagol_control%deltamin, &
711 explicit=smeagol_control%isexplicit_deltamin)
714 CALL section_vals_val_get(smeagol_section,
"Sigma.WarnInOutput", r_val=smeagol_control%tolsigma)
718 CALL section_vals_val_get(smeagol_section,
"HartreeLeadsLeft", r_val=smeagol_control%HartreeLeadsLeft)
719 CALL section_vals_val_get(smeagol_section,
"HartreeLeadsRight", r_val=smeagol_control%HartreeLeadsRight)
721 r_val=smeagol_control%HartreeLeadsBottom, &
722 explicit=smeagol_control%isexplicit_HartreeLeadsBottom)
725 IF (smeagol_control%nbss <= 0)
THEN
726 CALL cp_abort(__location__, &
727 "BS.Subsystems keyword should have a positive integer value.")
732 IF (is_explicit)
THEN
733 CALL section_vals_val_get(subsection,
"_DEFAULT_KEYWORD_", n_rep_val=nrep, explicit=is_explicit)
734 IF (.NOT. is_explicit) nrep = 0
737 IF (smeagol_control%nbss == nrep)
THEN
738 IF (is_explicit)
THEN
739 ALLOCATE (smeagol_control%nebss_bs(nrep, 2))
742 IF (
SIZE(iptr) == 2)
THEN
743 IF (minval(iptr) > 0 .AND. iptr(1) <= iptr(2))
THEN
744 smeagol_control%nebss_bs(i, 1:2) = iptr(1:2)
761 CALL cp_abort(__location__, &
762 "BS.SubSystemsBoundaries section is expected to have BS.Subsystems ("//trim(nvals_str)// &
763 ") lines with two positive integer numbers on each line.")
769 IF (is_explicit)
THEN
771 IF (smeagol_control%nbss /=
SIZE(rptr))
THEN
773 CALL cp_abort(__location__, &
774 "BS.SubSystemsDelta keyword is expected to have BS.Subsystems ("//trim(nvals_str)//
") real numbers.")
778 ALLOCATE (smeagol_control%deltabss_bs(n))
779 smeagol_control%deltabss_bs(1:n) = rptr(1:n)
784 IF (is_explicit)
THEN
788 IF (
SIZE(iptr) == 0 .OR. minval(iptr) <= 0)
THEN
789 CALL cp_abort(__location__, &
790 "All atomic indices in AM.AtomListBS should be positive integer numbers.")
794 ALLOCATE (ivec(n), indices(n))
795 ivec(1:n) = iptr(1:n)
796 CALL sort(ivec, n, indices)
800 IF (ivec(i) > ivec(i - 1)) n_unique = n_unique + 1
803 ALLOCATE (smeagol_control%atomlist_bs(n_unique))
805 smeagol_control%atomlist_bs(1) = ivec(1)
808 IF (ivec(i) > ivec(i - 1))
THEN
809 n_unique = n_unique + 1
810 smeagol_control%atomlist_bs(n_unique) = ivec(i)
815 CALL timestop(handle)
816 END SUBROUTINE read_smeagol_aux_control
real(kind=dp) function, public cp_unit_from_cp2k(value, unit_str, defaults, power)
converts from the internal cp2k units to the given unit
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Definition of physical constants:
real(kind=dp), parameter, public kelvin
Input control types for NEGF/SMEAGOL transport calculations.
subroutine, public read_smeagol_control(smeagol_control, smeagol_section)
Read SMEAGOL-related input parameters.
subroutine, public smeagol_control_release(smeagol_control)
release SMEAGOL control object
subroutine, public smeagol_control_create(smeagol_control)
allocate control options for SMEAGOL calculation
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,...
All kind of helpful little routines.
SMEAGOL-related input parameters.