diff --git a/src/discard/discard.f90 b/src/discard/discard.f90 index 97bbfbfc4..2ee3dafec 100644 --- a/src/discard/discard.f90 +++ b/src/discard/discard.f90 @@ -31,7 +31,7 @@ module subroutine discard_system(self, param) end if if (lpl_discards .or. ltp_discards) call system%write_discard(param) - if (lpl_discards .and. param%lenergy) call self%conservation_report(param, lterminal=.true.) + if (lpl_discards .and. param%lenergy) call self%conservation_report(param, lterminal=.false.) if (lpl_check) call pl_discards%setup(0,param) if (ltp_check) call tp_discards%setup(0,param) diff --git a/src/io/io.f90 b/src/io/io.f90 index 21c165e23..5fcae92b5 100644 --- a/src/io/io.f90 +++ b/src/io/io.f90 @@ -61,15 +61,15 @@ module subroutine io_conservation_report(self, param, lterminal) close(EGYIU, err = 667, iomsg = errmsg) end if - if (.not.param%lfirstenergy .and. lterminal) then + if (.not.param%lfirstenergy) then Lerror = norm2(Ltot_now(:) - param%Ltot_orig(:)) / norm2(param%Ltot_orig(:)) Eorbit_error = (Eorbit_now - param%Eorbit_orig) / abs(param%Eorbit_orig) Ecoll_error = param%Ecollisions / abs(param%Eorbit_orig) Etotal_error = (Eorbit_now - param%Ecollisions - param%Eorbit_orig - param%Euntracked) / abs(param%Eorbit_orig) Merror = (GMtot_now - param%GMtot_orig) / param%GMtot_orig - write(*, EGYTERMFMT) Lerror, Ecoll_error, Etotal_error, Merror - if (Merror < -10 * epsilon(Merror)) then - write(*,*) 'Mass loss! Halting!' + if (lterminal) write(*, EGYTERMFMT) Lerror, Ecoll_error, Etotal_error, Merror + if (abs(Merror) > 100 * epsilon(Merror)) then + write(*,*) "Severe error! Mass not conserved! Halting!" call pl%xv2el(cb) call param%nciu%open(param) call self%write_hdr(param%nciu, param)