From f8066b91f8689adce20a32fdd3f82b2448a915e4 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Mon, 13 Feb 2023 09:30:27 -0500 Subject: [PATCH] Put a limiter on the outer loop to keep Fraggle from churning away needlessly when nfrag is very large --- src/fraggle/fraggle_generate.f90 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/fraggle/fraggle_generate.f90 b/src/fraggle/fraggle_generate.f90 index 7c0b922f7..f34ce0fe2 100644 --- a/src/fraggle/fraggle_generate.f90 +++ b/src/fraggle/fraggle_generate.f90 @@ -528,7 +528,8 @@ module subroutine fraggle_generate_vel_vec(collider, nbody_system, param, lfailu real(DP), parameter :: hitandrun_vscale = 0.25_DP real(DP) :: vmin_guess real(DP) :: vmax_guess - integer(I4B), parameter :: MAXINNER = 20 + integer(I4B), parameter :: MAXLOOP = 20 + integer(I4B), parameter :: MAXTRY = 10 integer(I4B), parameter :: MAXANGMTM = 1000 class(collision_fraggle), allocatable :: collider_local character(len=STRMAX) :: message @@ -555,7 +556,7 @@ module subroutine fraggle_generate_vel_vec(collider, nbody_system, param, lfailu dE_best = huge(1.0_DP) nsteps_best = 0 nsteps = 0 - outer: do try = 1, nfrag - istart - 1 + outer: do try = 1, min(nfrag - istart - 1, MAXTRY) associate(fragments => collider_local%fragments) if (allocated(vsign)) deallocate(vsign); allocate(vsign(fragments%nbody)) if (allocated(vscale)) deallocate(vscale); allocate(vscale(fragments%nbody)) @@ -611,7 +612,7 @@ module subroutine fraggle_generate_vel_vec(collider, nbody_system, param, lfailu call fragments%set_coordinate_system() E_residual = huge(1.0_DP) - inner: do loop = 1, MAXINNER + inner: do loop = 1, MAXLOOP nsteps = nsteps + 1 mfrag = sum(fragments%mass(istart:fragments%nbody))