subroutine init_hist_tau_search ! split the new and old tau-search routines up, to no mix up ! too much stuff character(*), parameter :: this_routine = "init_hist_tau_search" integer :: ierr if (.not. input_tau_search_method == possible_tau_search_methods%HISTOGRAMMING ) then write(stdout, '(A)') 'init_hist_tau_search called but ' & // 'HISTOGRAMMING was not given as tau-search method' call stop_all(this_routine, 'Inconsistent input') end if ! if no truncating spawns is chosen warn here againg that that might ! cause problems! if (.not. t_truncate_spawns) then write(stdout, '(A)') "WARNING: NO spawn truncation chosen with keyword: " & // "truncate-spawns [float] in input. this might cause " & // "bloom problems with histogramming tau-search! BE CAUTIOUS!" end if if (tHub) then ! for the transcorrelated hamiltonian we need to re-enable the ! Histogramming tau-search! if (.not.(t_trans_corr .or. t_trans_corr_2body)) then call optimize_hubbard_time_step() return end if end if ! print out the standard quantities: root_print "Setup of the Histogramming tau-search: " root_print " Integration cut-off: ", histogramming_spec%frq_ratio_cutoff root_print " Number of bins: ", histogramming_spec%n_frequency_bins root_print " Max. ratio: ", histogramming_spec%max_frequency_bound ! do the initialization of the frequency analysis here.. ! i think otherwise it is not done on all the nodes.. ! don't need to check if t_frequency_analysis here anymore ! determine the global and fixed step-size quantitiy! ASSERT(histogramming_spec%frq_step_size .isclose. (histogramming_spec%max_frequency_bound / real(histogramming_spec%n_frequency_bins, dp))) root_print " Bin-width: ", histogramming_spec%frq_step_size ! and do the rest of the initialisation: ! Are we considering parallel-spin bias in the doubles? ! Do this logic here, so that if we add opposite spin bias to more ! excitation generators, then there is only one place that this logic ! needs to be updated! if (tGen_4ind_weighted .or. tGen_4ind_2) then consider_par_bias = .true. else if (tGen_4ind_reverse) then consider_par_bias = .true. n_opp = AB_hole_pairs n_par = par_hole_pairs else if (t_k_space_hubbard .and. t_trans_corr_2body) then ! for the 2-body transcorrelated k-space hubbard we also have ! possible parallel excitations now. and to make the tau-search ! working we need to set this to true ofc: consider_par_bias = .true. else if (t_fci_pchb_excitgen .and. .not. tGUGA) then ! The default pchb excitgen also uses parallel biases consider_par_bias = .true. else if (tSD_GAS()) then consider_par_bias = .true. else consider_par_bias = .false. end if ! If there are only a few electrons in the system, then this has ! impacts for the choices that can be made. if (nOccAlpha == 0 .or. nOccBeta == 0) then ! do i really need a histogramming tau-search in this case?? ! come on.. call stop_all(this_routine, & "Do you really need a tau-search for such a small system?") consider_par_bias = .false. pParallel = 1.0_dp end if if (nOccAlpha == 1 .and. nOccBeta == 1) then consider_par_bias = .false. call stop_all(this_routine, & "Do you really need a tau-search for such a small system?") pParallel = 0.0_dp end if if (t_mixed_hubbard .or. t_olle_hubbard) then pParallel = 0.0_dp end if t_consider_par_bias = consider_par_bias cnt_sing_hist = 0 enough_sing_hist = .false. above_max_singles = 0 below_thresh_singles = 0 gamma_sing = 0.0_dp min_sing = huge(0.0_dp) zero_singles = 0 cnt_doub_hist = 0 enough_doub_hist = .false. above_max_doubles = 0 below_thresh_doubles = 0 zero_doubles = 0 gamma_doub = 0.0_dp min_doub = huge(0.0_dp) ! triples data cnt_trip_hist = 0 enough_trip_hist = .false. gamma_trip = 0.0_dp min_trip = huge(0.0_dp) above_max_triples = 0 below_thresh_triples = 0 ! dependent if we use pParallel or not init specific hists if (consider_par_bias) then cnt_par_hist = 0 cnt_opp_hist = 0 enough_par_hist = .false. enough_opp_hist = .false. above_max_para = 0 below_thresh_para = 0 above_max_anti = 0 below_thresh_anti = 0 zero_para = 0 zero_anti = 0 gamma_par = 0.0_dp gamma_opp = 0.0_dp min_opp = huge(0.0_dp) min_par = huge(0.0_dp) allocate(frequency_bins_anti(histogramming_spec%n_frequency_bins), & frequency_bins_para(histogramming_spec%n_frequency_bins), & frequency_bins_singles(histogramming_spec%n_frequency_bins), & stat=ierr, source=0_int64) call LogMemAlloc('frequency_bins', histogramming_spec%n_frequency_bins * 3, int(sizeof(frequency_bins_anti(1))), & this_routine, mem_tag_histograms, ierr) else if (tGen_sym_guga_mol .or. & (tgen_guga_crude .and. .not. & (t_new_real_space_hubbard .or. t_k_space_hubbard))) then ! i always use the singles histogram dont I? i think so.. allocate(frequency_bins_singles(histogramming_spec%n_frequency_bins), & frequency_bins_doubles(histogramming_spec%n_frequency_bins), source=0_int64) else ! just to be save also use my new flags.. if (tHub .or. tUEG .or. & (t_k_space_hubbard .and. .not. t_trans_corr_2body) .or. & (t_new_real_space_hubbard .and. .not. t_trans_corr_hop)) then ! only one histogram is used! allocate(frequency_bins(histogramming_spec%n_frequency_bins), stat=ierr, source=0_int64) call LogMemAlloc('frequency_bins', histogramming_spec%n_frequency_bins, int(sizeof(frequency_bins(1))), & this_routine, mem_tag_histograms, ierr) else ! i always use the singles histogram dont I? i think so.. allocate(frequency_bins_singles(histogramming_spec%n_frequency_bins), & frequency_bins_doubles(histogramming_spec%n_frequency_bins), source=0_int64, stat=ierr) call LogMemAlloc('frequency_bins', histogramming_spec%n_frequency_bins * 2, int(sizeof(frequency_bins(1))), & this_routine, mem_tag_histograms, ierr) end if end if if (t_mol_3_body) then ! when doing integral-based triples, we are here allocate(frequency_bins_triples(histogramming_spec%n_frequency_bins), source=0_int64) end if if (t_log_ija) then ! allocate the new bins (although i am not sure i should do this ! here.. ! change the logging of these functions to sepereate between the ! different sorts of excitations and log them through spatial orbitals! allocate(ija_bins_sing(nBasis / 2), & ija_bins_para(nBasis / 2, nBasis / 2, nBasis / 2), & ija_bins_anti(nBasis / 2, nBasis / 2, nBasis / 2), & ija_orbs_sing(nBasis / 2), & ija_orbs_para(nBasis / 2, nBasis / 2, nBasis / 2), & ija_orbs_anti(nBasis / 2, nBasis / 2, nBasis / 2), & source=0) root_print "Logging dead-end (a|ij) excitations below threshold: ", ija_thresh end if end subroutine init_hist_tau_search