diff --git a/cmake/Modules/SetFortranFlags.cmake b/cmake/Modules/SetFortranFlags.cmake index 5ce3c4925..cb5ab68ad 100644 --- a/cmake/Modules/SetFortranFlags.cmake +++ b/cmake/Modules/SetFortranFlags.cmake @@ -109,14 +109,17 @@ SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" "-fbacktrace" # GNU (gfortran) "-ftrace=full" # GNU (g95) ) +# Sanitize +SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" + Fortran "-fsanitize=address" # Gnu + ) + # Check everything SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" Fortran "-check" # Intel "/check" # Intel Windows - "-fcheck=bounds" # GNU (New style) - "-fbounds-check" # GNU (Old style) - "-Mbounds" # Portland Group + "-fcheck=all" # GNU ) # Initializes matrices/arrays with NaN values @@ -142,6 +145,7 @@ SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" # Enables floating-point invalid, divide-by-zero, and overflow exceptions SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" Fortran "-fpe-all=0" # Intel + "-ffpe-trap=zero,overflow,underflow" # GNU ) # Improves floating-point precision and consistency diff --git a/src/fraggle/fraggle_generate.f90 b/src/fraggle/fraggle_generate.f90 index e3beb38e1..aea492a63 100644 --- a/src/fraggle/fraggle_generate.f90 +++ b/src/fraggle/fraggle_generate.f90 @@ -293,7 +293,7 @@ module subroutine fraggle_generate_pos_vec(collider) ! Later, velocities will be scaled such that the farther away a fragment is placed from the impact point, the higher will its velocity be. call random_number(mass_rscale) mass_rscale(:) = (mass_rscale(:) + 1.0_DP) / 2 - mass_rscale(:) = mass_rscale(:) * (fragments%mtot / fragments%mass(:))**(0.125_DP) ! The power is arbitrary. It just gives the velocity a small mass dependence + mass_rscale(:) = mass_rscale(:) * (fragments%mtot / fragments%mass(1:nfrag))**(0.125_DP) ! The power is arbitrary. It just gives the velocity a small mass dependence mass_rscale(:) = mass_rscale(:) / maxval(mass_rscale(:)) do loop = 1, MAXLOOP