mirror of
https://github.com/pfloos/quack
synced 2024-08-14 16:48:35 +02:00
29 lines
620 B
Fortran
29 lines
620 B
Fortran
subroutine optimize_timestep(nWalk,iMC,Acc,dt)
|
|
|
|
! Optimize dt to get 50% of accepted moves
|
|
|
|
implicit none
|
|
|
|
! Input variables
|
|
|
|
integer,intent(in) :: nWalk,iMC
|
|
double precision,intent(inout):: Acc,dt
|
|
|
|
! Local variables
|
|
|
|
double precision :: TotAcc,Current_Acc,Target_Acc,delta
|
|
|
|
TotAcc = Acc/dble(nWalk)
|
|
Current_Acc = 100d0*TotAcc/dble(iMC)
|
|
|
|
Target_Acc = 50.0d0
|
|
|
|
delta = dt*abs(Target_Acc - Current_Acc)/100.d0
|
|
if(Current_Acc > Target_Acc + 0.5d0)then
|
|
dt = dt + delta
|
|
elseif(Current_Acc < Target_Acc - 0.5d0)then
|
|
dt = dt - delta
|
|
endif
|
|
|
|
end subroutine optimize_timestep
|