From a543463ab3eddf42028c3ba2b2d41139aa90953e Mon Sep 17 00:00:00 2001 From: David A Minton Date: Thu, 5 Jan 2023 20:26:42 -0500 Subject: [PATCH] Improved messaging by writing to log file instead of terminal --- examples/Chambers2013/.gitignore | 1 + src/collision/collision_check.f90 | 2 +- src/collision/collision_generate.f90 | 2 +- src/collision/collision_regime.f90 | 2 +- src/collision/collision_resolve.f90 | 5 ++-- src/helio/helio_drift.f90 | 6 ++++- src/rmvs/rmvs_discard.f90 | 5 ++-- src/rmvs/rmvs_step.f90 | 35 ++++++++++++++++------------ src/swiftest/swiftest_discard.f90 | 6 +++-- src/swiftest/swiftest_drift.f90 | 6 ++++- src/swiftest/swiftest_io.f90 | 1 - src/symba/symba_discard.f90 | 5 ++-- src/whm/whm_drift.f90 | 12 ++++++---- 13 files changed, 53 insertions(+), 35 deletions(-) diff --git a/examples/Chambers2013/.gitignore b/examples/Chambers2013/.gitignore index 80c7e7bd6..3e7954819 100644 --- a/examples/Chambers2013/.gitignore +++ b/examples/Chambers2013/.gitignore @@ -1,3 +1,4 @@ * !.gitignore !init_cond.py +!aescattermovie.py \ No newline at end of file diff --git a/src/collision/collision_check.f90 b/src/collision/collision_check.f90 index 1f88c98aa..b67526977 100644 --- a/src/collision/collision_check.f90 +++ b/src/collision/collision_check.f90 @@ -244,7 +244,7 @@ module subroutine collision_check_pltp(self, nbody_system, param, t, dt, irec, l write(message, *) "Particle " // trim(adjustl(tp%info(j)%name)) // " (" // trim(adjustl(idstrj)) // ")" & // " collided with massive body " // trim(adjustl(pl%info(i)%name)) // " (" // trim(adjustl(idstri)) // ")" & // " at t = " // trim(adjustl(timestr)) - !call swiftest_io_log_one_message(COLLISION_LOG_OUT, message) + call swiftest_io_log_one_message(COLLISION_LOG_OUT, message) end if end do diff --git a/src/collision/collision_generate.f90 b/src/collision/collision_generate.f90 index 5cb2e68aa..9a23ee4f4 100644 --- a/src/collision/collision_generate.f90 +++ b/src/collision/collision_generate.f90 @@ -86,7 +86,7 @@ module subroutine collision_generate_bounce(self, nbody_system, param, t) case (COLLRESOLVE_REGIME_MERGE, COLLRESOLVE_REGIME_GRAZE_AND_MERGE) call self%merge(nbody_system, param, t) ! Use the default collision model, which is merge case default - write(*,*) "Error in swiftest_collision, unrecognized collision regime" + call swiftest_io_log_one_message(COLLISION_LOG_OUT,"Error in swiftest_collision, unrecognized collision regime") call util_exit(FAILURE) end select end associate diff --git a/src/collision/collision_regime.f90 b/src/collision/collision_regime.f90 index a1ae47fe0..6e5199ca3 100644 --- a/src/collision/collision_regime.f90 +++ b/src/collision/collision_regime.f90 @@ -262,7 +262,7 @@ subroutine collision_regime_LS12_SI(Mcb, m1, m2, rad1, rad2, rh1, rh2, vb1, vb2, regime = COLLRESOLVE_REGIME_SUPERCATASTROPHIC ! supercatastrophic Qloss = (c_star + 1.0_DP) * U_binding ! Qr - Qr_supercat else - write(*,*) "Error no regime found in symba_regime" + call swiftest_io_log_one_message(COLLISION_LOG_OUT,"Error no regime found in symba_regime") end if end if diff --git a/src/collision/collision_resolve.f90 b/src/collision/collision_resolve.f90 index e33f9b3b3..a7236faf3 100644 --- a/src/collision/collision_resolve.f90 +++ b/src/collision/collision_resolve.f90 @@ -574,9 +574,8 @@ module subroutine collision_resolve_plpl(self, nbody_system, param, t, dt, irec) if (.not.lplpl_collision) exit if (loop == MAXCASCADE) then - write(*,*) - write(*,*) "An runaway collisional cascade has been detected in collision_resolve_plpl." - write(*,*) "Consider reducing the step size or changing the parameters in the collisional model to reduce the number of fragments." + call swiftest_io_log_one_message(COLLISION_LOG_OUT,"An runaway collisional cascade has been detected in collision_resolve_plpl.") + call swiftest_io_log_one_message(COLLISION_LOG_OUT,"Consider reducing the step size or changing the parameters in the collisional model to reduce the number of fragments.") call util_exit(FAILURE) end if end associate diff --git a/src/helio/helio_drift.f90 b/src/helio/helio_drift.f90 index ad476a2b2..134421d2b 100644 --- a/src/helio/helio_drift.f90 +++ b/src/helio/helio_drift.f90 @@ -28,6 +28,7 @@ module subroutine helio_drift_body(self, nbody_system, param, dt) integer(I4B) :: i !! Loop counter integer(I4B), dimension(:),allocatable :: iflag !! Vectorized error code flag real(DP), dimension(:), allocatable :: mu + character(len=STRMAX) message if (self%nbody == 0) return @@ -40,7 +41,10 @@ module subroutine helio_drift_body(self, nbody_system, param, dt) if (any(iflag(1:n) /= 0)) then where(iflag(1:n) /= 0) self%status(1:n) = DISCARDED_DRIFTERR do i = 1, n - if (iflag(i) /= 0) write(*, *) " Body ", self%id(i), " lost due to error in Danby drift" + if (iflag(i) /= 0) then + write(message, *) " Body ", self%id(i), " lost due to error in Danby drift" + call swiftest_io_log_one_message(COLLISION_LOG_OUT,message) + end if end do end if end associate diff --git a/src/rmvs/rmvs_discard.f90 b/src/rmvs/rmvs_discard.f90 index 5a8fd94f5..7e0cb9905 100644 --- a/src/rmvs/rmvs_discard.f90 +++ b/src/rmvs/rmvs_discard.f90 @@ -25,7 +25,7 @@ module subroutine rmvs_discard_tp(self, nbody_system, param) class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters ! Internals integer(I4B) :: i - character(len=STRMAX) :: timestr, idstri, idstrj + character(len=STRMAX) :: timestr, idstri, idstrj, message if (self%nbody == 0) return @@ -38,9 +38,10 @@ module subroutine rmvs_discard_tp(self, nbody_system, param) write(idstri, *) tp%id(i) write(idstrj, *) pl%id(iplperP) write(timestr, *) t - write(*, *) "Particle " // trim(adjustl(tp%info(i)%name)) // " (" // trim(adjustl(idstri)) & + write(message, *) "Particle " // trim(adjustl(tp%info(i)%name)) // " (" // trim(adjustl(idstri)) & // ") q with respect to massive body " // trim(adjustl(pl%info(iplperP)%name)) & // " (" // trim(adjustl(idstrj)) // ") is too small at t = " // trim(adjustl(timestr)) + call swiftest_io_log_one_message(COLLISION_LOG_OUT,message) tp%ldiscard(i) = .true. tp%lmask(i) = .false. call tp%info(i)%set_value(status="DISCARDED_PLQ", discard_time=t, discard_rh=tp%rh(:,i), & diff --git a/src/rmvs/rmvs_step.f90 b/src/rmvs/rmvs_step.f90 index 1bc313336..19b8779f6 100644 --- a/src/rmvs/rmvs_step.f90 +++ b/src/rmvs/rmvs_step.f90 @@ -93,6 +93,7 @@ subroutine rmvs_interp_out(cb, pl, dt) real(DP), dimension(:,:), allocatable :: xtmp, vtmp real(DP), dimension(:), allocatable :: GMcb, dto integer(I4B), dimension(:), allocatable :: iflag + character(len=STRMAX) :: message dntenc = real(NTENC, kind=DP) associate (npl => pl%nbody) @@ -112,11 +113,12 @@ subroutine rmvs_interp_out(cb, pl, dt) if (any(iflag(1:npl) /= 0)) then do i = 1, npl if (iflag(i) /= 0) then - write(*, *) " Planet ", pl%id(i), " is lost!!!!!!!!!!" - write(*, *) GMcb(i), dto(i) - write(*, *) xtmp(:,i) - write(*, *) vtmp(:,i) - write(*, *) " STOPPING " + write(message, *) " Planet ", pl%id(i), " is lost!!!!!!!!!!",new_line('a'), & + GMcb(i), dto(i),new_line('a'), & + xtmp(:,i),new_line('a'), & + vtmp(:,i),new_line('a'), & + " STOPPING " + call swiftest_io_log_one_message(COLLISION_LOG_OUT,message) call util_exit(FAILURE) end if end do @@ -134,11 +136,12 @@ subroutine rmvs_interp_out(cb, pl, dt) if (any(iflag(1:npl) /= 0)) then do i = 1, npl if (iflag(i) /= 0) then - write(*, *) " Planet ", pl%id(i), " is lost!!!!!!!!!!" - write(*, *) GMcb(i), -dto(i) - write(*, *) xtmp(:,i) - write(*, *) vtmp(:,i) - write(*, *) " STOPPING " + write(message, *) " Planet ", pl%id(i), " is lost!!!!!!!!!!",new_line('a'), & + GMcb(i), -dto(i), new_line('a'), & + xtmp(:,i), new_line('a'), & + vtmp(:,i), new_line('a'), & + " STOPPING " + call swiftest_io_log_one_message(COLLISION_LOG_OUT,message) call util_exit(FAILURE) end if end do @@ -237,6 +240,7 @@ subroutine rmvs_interp_in(cb, pl, nbody_system, param, dt, outer_index) real(DP), dimension(:,:), allocatable :: xtmp, vtmp, rh_original, ah_original real(DP), dimension(:), allocatable :: GMcb, dti integer(I4B), dimension(:), allocatable :: iflag + character(len=STRMAX) :: message associate (npl => nbody_system%pl%nbody) dntphenc = real(NTPHENC, kind=DP) @@ -279,11 +283,12 @@ subroutine rmvs_interp_in(cb, pl, nbody_system, param, dt, outer_index) if (any(iflag(1:npl) /= 0)) then do i = 1, npl if (iflag(i) /=0) then - write(*, *) " Planet ", pl%id(i), " is lost!!!!!!!!!!" - write(*, *) GMcb(i), dti(i) - write(*, *) xtmp(:,i) - write(*, *) vtmp(:,i) - write(*, *) " STOPPING " + write(message, *) " Planet ", pl%id(i), " is lost!!!!!!!!!!", new_line('a'), & + GMcb(i), dti(i), new_line('a'), & + xtmp(:,i), new_line('a'), & + vtmp(:,i), new_line('a'), & + " STOPPING " + call swiftest_io_log_one_message(COLLISION_LOG_OUT, message) call util_exit(failure) end if end do diff --git a/src/swiftest/swiftest_discard.f90 b/src/swiftest/swiftest_discard.f90 index eafb53452..ad5be95ae 100644 --- a/src/swiftest/swiftest_discard.f90 +++ b/src/swiftest/swiftest_discard.f90 @@ -200,7 +200,7 @@ subroutine swiftest_discard_peri_tp(tp, nbody_system, param) integer(I4B) :: i, j, ih real(DP) :: r2 real(DP), dimension(NDIM) :: dx - character(len=STRMAX) :: idstr, timestr + character(len=STRMAX) :: idstr, timestr, message associate(cb => nbody_system%cb, ntp => tp%nbody, pl => nbody_system%pl, npl => nbody_system%pl%nbody, t => nbody_system%t) call tp%get_peri(nbody_system, param) @@ -220,8 +220,10 @@ subroutine swiftest_discard_peri_tp(tp, nbody_system, param) tp%status(i) = DISCARDED_PERI write(idstr, *) tp%id(i) write(timestr, *) nbody_system%t - write(*, *) "Particle " // trim(adjustl(tp%info(i)%name)) // " (" // trim(adjustl(idstr)) // ")" // & + write(message, *) "Particle " // trim(adjustl(tp%info(i)%name)) // " (" // trim(adjustl(idstr)) // ")" // & " perihelion distance too small at t = " // trim(adjustl(timestr)) + + call swiftest_io_log_one_message(COLLISION_LOG_OUT, message) tp%ldiscard(i) = .true. call tp%info(i)%set_value(status="DISCARDED_PERI", discard_time=nbody_system%t, discard_rh=tp%rh(:,i), & discard_vh=tp%vh(:,i), discard_body_id=pl%id(j)) diff --git a/src/swiftest/swiftest_drift.f90 b/src/swiftest/swiftest_drift.f90 index 89f8afa16..b7811f88c 100644 --- a/src/swiftest/swiftest_drift.f90 +++ b/src/swiftest/swiftest_drift.f90 @@ -34,6 +34,7 @@ module subroutine swiftest_drift_body(self, nbody_system, param, dt) ! Internals integer(I4B) :: i integer(I4B), dimension(:), allocatable :: iflag + character(len=STRMAX) :: message associate(n => self%nbody) allocate(iflag(n)) @@ -42,7 +43,10 @@ module subroutine swiftest_drift_body(self, nbody_system, param, dt) if (any(iflag(1:n) /= 0)) then where(iflag(1:n) /= 0) self%status(1:n) = DISCARDED_DRIFTERR do i = 1, n - if (iflag(i) /= 0) write(*, *) " Body ", self%id(i), " lost due to error in Danby drift" + if (iflag(i) /= 0) then + write(message, *) " Body ", self%id(i), " lost due to error in Danby drift" + call swiftest_io_log_one_message(COLLISION_LOG_OUT, message) + end if end do end if end associate diff --git a/src/swiftest/swiftest_io.f90 b/src/swiftest/swiftest_io.f90 index 3347511f4..4fe297197 100644 --- a/src/swiftest/swiftest_io.f90 +++ b/src/swiftest/swiftest_io.f90 @@ -2063,7 +2063,6 @@ module subroutine swiftest_io_param_reader(self, unit, iotype, v_list, iostat, i ! Calculate the G for the nbody_system units param%GU = GC / (param%DU2M**3 / (param%MU2KG * param%TU2S**2)) - ! A minimal log of collision outcomes is stored in the following log file ! More complete data on collisions is stored in the NetCDF output files call swiftest_io_log_start(param, COLLISION_LOG_OUT, "Collision logfile") diff --git a/src/symba/symba_discard.f90 b/src/symba/symba_discard.f90 index 75abb741f..88d674fb5 100644 --- a/src/symba/symba_discard.f90 +++ b/src/symba/symba_discard.f90 @@ -301,7 +301,7 @@ subroutine symba_discard_peri_pl(pl, nbody_system, param) logical, save :: lfirst = .true. logical :: lfirst_orig integer(I4B) :: i - character(len=STRMAX) :: timestr, idstr + character(len=STRMAX) :: timestr, idstr, message lfirst_orig = pl%lfirst @@ -320,8 +320,9 @@ subroutine symba_discard_peri_pl(pl, nbody_system, param) pl%status(i) = DISCARDED_PERI write(timestr, *) nbody_system%t write(idstr, *) pl%id(i) - write(*, *) trim(adjustl(pl%info(i)%name)) // " (" // trim(adjustl(idstr)) // & + write(message, *) trim(adjustl(pl%info(i)%name)) // " (" // trim(adjustl(idstr)) // & ") perihelion distance too small at t = " // trim(adjustl(timestr)) + call swiftest_io_log_one_message(COLLISION_LOG_OUT, message) call pl%info(i)%set_value(status="DISCARDED_PERI", discard_time=nbody_system%t, & discard_rh=pl%rh(:,i), discard_vh=pl%vh(:,i), discard_body_id=nbody_system%cb%id) end if diff --git a/src/whm/whm_drift.f90 b/src/whm/whm_drift.f90 index 21a092793..5d507c42b 100644 --- a/src/whm/whm_drift.f90 +++ b/src/whm/whm_drift.f90 @@ -27,6 +27,7 @@ module subroutine whm_drift_pl(self, nbody_system, param, dt) ! Internals integer(I4B) :: i integer(I4B), dimension(:), allocatable :: iflag + character(len=STRMAX) :: message if (self%nbody == 0) return @@ -41,11 +42,12 @@ module subroutine whm_drift_pl(self, nbody_system, param, dt) end where do i = 1, npl if (iflag(i) /= 0) then - write(*, *) " Planet ", pl%id(i), " is lost!!!!!!!!!!!!" - WRITE(*, *) pl%muj(i), dt - WRITE(*, *) pl%xj(:,i) - WRITE(*, *) pl%vj(:,i) - WRITE(*, *) " STOPPING " + write(message, *) " Planet ", pl%id(i), " is lost!!!!!!!!!!!!",new_line('A'), & + pl%muj(i), dt, new_line('A'), & + pl%xj(:,i),new_line('A'), & + pl%vj(:,i),new_line('A'), & + " STOPPING " + call swiftest_io_log_one_message(COLLISION_LOG_OUT, message) end if end do call util_exit(FAILURE)