subroutine adjust_nRefs() ! update the number of SIs used use adi_data, only: targetRefPopTol, tSingleSteps use FciMCData, only: AllNoatHF implicit none real(dp) :: cAllNoatHF integer :: nRefsOld if (tVariableNRef) then nRefsOld = nRefs ! average reference population cAllNoatHF = sum(AllNoatHF) / inum_runs ! check if we reached the destination if (abs(targetRefPop - cAllNoatHF) < targetRefPopTol) return if (tSingleSteps) then if (cAllNoatHF < targetRefPop) then ! we cannot go below 0 SIs, if we hit 0, disable the adi option if (nRefs > 1) then nRefs = nRefs - 1 else ! might change the behaviour here, to whatever makes sense tAdiActive = .false. end if end if if (cAllNoatHF > targetRefPop) nRefs = nRefs + 1 tSingleSteps = .false. else ! do the extrapolationx nRefs = guess_target_nref() end if ! store the current values for the next step lastAllNoatHF = cAllNoatHF lastNRefs = nRefsOld write(stdout, *) "Now at ", nRefs, " superinitiators" end if end subroutine adjust_nRefs