diff --git a/Makefile.Defines b/Makefile.Defines index 955ebe221..3789bb8a8 100644 --- a/Makefile.Defines +++ b/Makefile.Defines @@ -66,10 +66,9 @@ GMEM = -fsanitize-address-use-after-scope -fstack-check -fsanitize=bounds-stri GWARNINGS = -Wall -Warray-bounds -Wimplicit-interface -Wextra -Warray-temporaries GPRODUCTION = -O2 -ffree-line-length-none $(GPAR) - -#FFLAGS = $(IDEBUG) $(SIMDVEC) $(PAR) +#FFLAGS = $(IDEBUG) $(SIMDVEC) $(PAR) #FFASTFLAGS = $(IDEBUG) $(SIMDVEC) $(PAR) -FFSTRICTFLAGS = $(IPRODUCTION) $(STRICTREAL) $(OPTREPORT) #$(ADVIXE_FLAGS) +FSTRICTFLAGS = $(IPRODUCTION) $(STRICTREAL) $(OPTREPORT) #$(ADVIXE_FLAGS) FFLAGS = $(IPRODUCTION) -fp-model=fast $(OPTREPORT) #$(ADVIXE_FLAGS) FORTRAN = ifort AR = xiar diff --git a/src/encounter/encounter_check.f90 b/src/encounter/encounter_check.f90 index d869e242e..b1a665b27 100644 --- a/src/encounter/encounter_check.f90 +++ b/src/encounter/encounter_check.f90 @@ -662,7 +662,7 @@ subroutine encounter_check_all_triangular_plpl(npl, x, v, renc, dt, lvdotr, inde type(encounter_list), dimension(npl) :: lenc call util_index_array(ind_arr, npl) - + !$omp parallel do default(private) schedule(static)& !$omp shared(x, v, renc, lenc, ind_arr) & !$omp firstprivate(npl, dt) @@ -800,21 +800,25 @@ module pure subroutine encounter_check_one(xr, yr, zr, vxr, vyr, vzr, renc, dt, if (r2 > r2crit) then vdotr = vxr * xr + vyr * yr + vzr * zr - v2 = vxr**2 + vyr**2 + vzr**2 - tmin = -vdotr / v2 - - if (tmin < dt) then - r2min = r2 - vdotr**2 / v2 + if (vdotr > 0.0_DP) then + r2min = r2 else - r2min = r2 + 2 * vdotr * dt + v2 * dt**2 + v2 = vxr**2 + vyr**2 + vzr**2 + tmin = -vdotr / v2 + + if (tmin < dt) then + r2min = r2 - vdotr**2 / v2 + else + r2min = r2 + 2 * vdotr * dt + v2 * dt**2 + end if end if else - vdotr = 0.0_DP + vdotr = -1.0_DP r2min = r2 end if - lencounter = (r2min <= r2crit) lvdotr = (vdotr < 0.0_DP) + lencounter = lvdotr .and. (r2min <= r2crit) return end subroutine encounter_check_one @@ -904,8 +908,8 @@ module subroutine encounter_check_sweep_aabb_double_list(self, n1, n2, nenc, ind !Internals integer(I4B) :: i, k, ntot type(encounter_list), dimension(n1+n2) :: lenc !! Array of encounter lists (one encounter list per body) - type(walltimer) :: timer integer(I4B), dimension(:), allocatable, save :: ind_arr + type(walltimer) :: timer ntot = n1 + n2 call util_index_array(ind_arr, ntot) diff --git a/src/kick/kick.f90 b/src/kick/kick.f90 index e1743f79f..717a96753 100644 --- a/src/kick/kick.f90 +++ b/src/kick/kick.f90 @@ -160,7 +160,7 @@ module subroutine kick_getacch_int_all_triangular_pl(npl, nplm, x, Gmass, radius end do end do !$omp end parallel do - + do concurrent(i = 1:npl) acc(:,i) = acc(:,i) + ahi(:,i) + ahj(:,i) end do