subroutine init_k_space_hubbard() character(*), parameter :: this_routine = "init_k_space_hubbard" real(dp) :: tau_opt if (iProcIndex == root) then print *, " new k-space hubbard implementation init:" end if ! i have to set the incorrect excitaiton generator flags to false tLatticeGens = .false. ! maybe i also need to turn off the hubbard keyword.. at this ! point thub = .false. tExch = .true. tNoBrillouin = .false. tUseBrillouin = .true. call check_k_space_hubbard_input() get_umat_el => get_umat_kspace call init_get_helement_k_space_hub() if (t_mixed_excits .and. .not. t_trans_corr_2body) then root_print "WARNING: mixed excit gen chosen, but no transcorrelation" root_print " use uniform for doubles!" t_uniform_excits = .true. end if tau_opt = determine_optimal_time_step() if (tau < EPS) then call assign_value_to_tau(& clamp(lat_tau_factor * tau_opt, min_tau, max_tau), & 'Initialization with optimal tau value') else if (iProcIndex == root) then print *, "optimal time-step would be: ", tau_opt print *, "but tau specified in input!" end if end if ! [W.D. 7.3.2018] ! re-enable the tau-search and histogramming for the k-space ! hubbard model with transcorrelation ! since there the matrix elements are not equal for every ! excitation anymore and for the Gutzwiller correlation factor ! we also have additional pTriples and pParallel variables, which ! we might want to adapt on-the-fly as in the ab-initio calculations ! and I also want to check if i got the excitation weighting correct ! in the transcorrelated case or if i messed it up due to the ! non-hermitian character of the hamiltonian if (.not. (t_trans_corr_2body .or. t_trans_corr .or. tGUGA)) then if (tau_search_method /= possible_tau_search_methods%OFF) then call stop_all(this_routine, "tau-search should be switched off") end if end if if (associated(lat)) then call setup_nbasismax(lat) call setup_g1(lat) call setup_tmat_k_space(lat) call setup_kPointToBasisFn(lat) end if if (t_trans_corr_2body) then if (tHPHF) then call Stop_All(this_routine, "not yet implemented with HPHF") end if three_body_prefac = real(bhub, dp) * 2.0_dp * (cosh(trans_corr_param_2body) - 1.0_dp) / real(omega**2, dp) ! i also have to set some generation probability parameters.. ! use pSingles for triples! ! BE CAREFUL and dont get confused! ! @Werner: does this make sense? if (allocated(pSinglesIn) .and. allocated(pDoublesIn)) then if (.not. (pSinglesIn + pDoublesIn .isclose. 1.0_dp)) then call stop_all(this_routine, "pSinglesIn + pDoublesIn /= 1.0!") else pSingles = pSinglesIn pDoubles = pDoublesIn end if else if (allocated(pSinglesIn) .and. (.not. allocated(pDoublesIn))) then pSingles = pSinglesIn pDoubles = 1.0_dp - pSingles else if (allocated(pDoublesIn) .and. (.not. allocated(pSinglesIn))) then pDoubles = pDoublesIn pSingles = 1.0_dp - pDoubles else pDoubles = 0.8_dp pSingles = 1.0_dp - pDoubles end if if (allocated(pParallelIn)) then pParallel = pParallelIn else pParallel = 0.5_dp end if end if if (.not. (t_trans_corr_2body .or. t_trans_corr)) then call initialize_excit_table() end if end subroutine init_k_space_hubbard