diff --git a/src/collision/collision_generate.f90 b/src/collision/collision_generate.f90 index f646c45ea..d689c3662 100644 --- a/src/collision/collision_generate.f90 +++ b/src/collision/collision_generate.f90 @@ -167,7 +167,7 @@ module subroutine collision_generate_bounce(self, nbody_system, param, t) class(base_parameters), intent(inout) :: param !! Current run configuration parameters real(DP), intent(in) :: t !! The time of the collision ! Internals - integer(I4B) :: nfrag + integer(I4B) :: i,nfrag select type(nbody_system) class is (swiftest_nbody_system) @@ -175,6 +175,9 @@ module subroutine collision_generate_bounce(self, nbody_system, param, t) select case (impactors%regime) case (COLLRESOLVE_REGIME_DISRUPTION, COLLRESOLVE_REGIME_SUPERCATASTROPHIC) nfrag = size(impactors%id(:)) + call self%setup_fragments(nfrag) + + case (COLLRESOLVE_REGIME_HIT_AND_RUN) call collision_generate_hitandrun(self, nbody_system, param, t) case (COLLRESOLVE_REGIME_MERGE, COLLRESOLVE_REGIME_GRAZE_AND_MERGE) @@ -189,6 +192,7 @@ module subroutine collision_generate_bounce(self, nbody_system, param, t) return end subroutine collision_generate_bounce + module subroutine collision_generate_simple(self, nbody_system, param, t) implicit none class(collision_simple), intent(inout) :: self !! Simple fragment system object diff --git a/src/collision/collision_io.f90 b/src/collision/collision_io.f90 index 1a11bf43a..048653068 100644 --- a/src/collision/collision_io.f90 +++ b/src/collision/collision_io.f90 @@ -45,40 +45,39 @@ module subroutine collision_io_collider_message(pl, collidx, collider_message) end subroutine collision_io_collider_message - module subroutine collision_io_log_regime(self) + module subroutine collision_io_log_regime(impactors) !! author: David A. Minton !! !! Writes a log of the results of the collisional regime determination implicit none ! Arguments - class(collision_merge), intent(inout) :: self !! Collision system object + class(collision_impactors), intent(inout) :: impactors !! Collision system object ! Internals character(STRMAX) :: errmsg - associate(fragments => self%fragments, impactors => self%impactors) - open(unit=LUN, file=COLLISION_LOG_OUT, status = 'OLD', position = 'APPEND', form = 'FORMATTED', err = 667, iomsg = errmsg) - write(LUN, *, err = 667, iomsg = errmsg) - write(LUN, *) "--------------------------------------------------------------------" - write(LUN, *) " Collisional regime determination results" - write(LUN, *) "--------------------------------------------------------------------" - write(LUN, *) "True number of impactors : ",impactors%ncoll - write(LUN, *) "Index list of true impactors : ",impactors%id(1:impactors%ncoll) - select case(impactors%regime) - case(COLLRESOLVE_REGIME_MERGE) - write(LUN, *) "Regime: Merge" - case(COLLRESOLVE_REGIME_DISRUPTION) - write(LUN, *) "Regime: Disruption" - case(COLLRESOLVE_REGIME_SUPERCATASTROPHIC) - write(LUN, *) "Regime: Supercatastrophic disruption" - case(COLLRESOLVE_REGIME_GRAZE_AND_MERGE) - write(LUN, *) "Regime: Graze and merge" - case(COLLRESOLVE_REGIME_HIT_AND_RUN) - write(LUN, *) "Regime: Hit and run" - end select - write(LUN, *) "Energy loss : ", impactors%Qloss - write(LUN, *) "--------------------------------------------------------------------" - close(LUN) - end associate + open(unit=LUN, file=COLLISION_LOG_OUT, status = 'OLD', position = 'APPEND', form = 'FORMATTED', err = 667, iomsg = errmsg) + write(LUN, *, err = 667, iomsg = errmsg) + write(LUN, *) "--------------------------------------------------------------------" + write(LUN, *) " Collisional regime determination results" + write(LUN, *) "--------------------------------------------------------------------" + write(LUN, *) "True number of impactors : ",impactors%ncoll + write(LUN, *) "Index list of true impactors : ",impactors%id(1:impactors%ncoll) + select case(impactors%regime) + case(COLLRESOLVE_REGIME_MERGE) + write(LUN, *) "Regime: Merge" + case(COLLRESOLVE_REGIME_DISRUPTION) + write(LUN, *) "Regime: Disruption" + case(COLLRESOLVE_REGIME_SUPERCATASTROPHIC) + write(LUN, *) "Regime: Supercatastrophic disruption" + case(COLLRESOLVE_REGIME_GRAZE_AND_MERGE) + write(LUN, *) "Regime: Graze and merge" + case(COLLRESOLVE_REGIME_HIT_AND_RUN) + write(LUN, *) "Regime: Hit and run" + end select + write(LUN, *) "Energy loss : ", impactors%Qloss + write(LUN, *) "--------------------------------------------------------------------" + close(LUN) + return 667 continue write(*,*) "Error writing collision regime information to log file: " // trim(adjustl(errmsg)) diff --git a/src/collision/collision_module.f90 b/src/collision/collision_module.f90 index 494855d12..237999adf 100644 --- a/src/collision/collision_module.f90 +++ b/src/collision/collision_module.f90 @@ -237,9 +237,9 @@ module subroutine collision_io_collider_message(pl, collidx, collider_message) character(*), intent(inout) :: collider_message !! The message to print to the screen. end subroutine collision_io_collider_message - module subroutine collision_io_log_regime(self) + module subroutine collision_io_log_regime(impactors) implicit none - class(collision_merge), intent(inout) :: self !! Collision system object + class(collision_impactors), intent(inout) :: impactors !! Collision system object end subroutine collision_io_log_regime module subroutine collision_io_netcdf_dump(self, param) diff --git a/src/collision/collision_regime.f90 b/src/collision/collision_regime.f90 index ac571b23c..197a84f42 100644 --- a/src/collision/collision_regime.f90 +++ b/src/collision/collision_regime.f90 @@ -32,19 +32,20 @@ module subroutine collision_regime_impactors(self, nbody_system, param) select type(param) class is (swiftest_parameters) + mtot = sum(impactors%mass(:)) + impactors%rbcom(:) = (impactors%mass(1) * impactors%rb(:,1) + impactors%mass(2) * impactors%rb(:,2)) / mtot + impactors%vbcom(:) = (impactors%mass(1) * impactors%vb(:,1) + impactors%mass(2) * impactors%vb(:,2)) / mtot + select case(param%collision_model) case("MERGE") impactors%regime = COLLRESOLVE_REGIME_MERGE - mtot = sum(impactors%mass(:)) if (allocated(impactors%mass_dist)) deallocate(impactors%mass_dist) allocate(impactors%mass_dist(1)) impactors%mass_dist(1) = mtot - impactors%rbcom(:) = (impactors%mass(1) * impactors%rb(:,1) + impactors%mass(2) * impactors%rb(:,2)) / mtot - impactors%vbcom(:) = (impactors%mass(1) * impactors%vb(:,1) + impactors%mass(2) * impactors%vb(:,2)) / mtot case default call collision_regime_LS12(impactors, nbody_system, param) + call collision_io_log_regime(self) end select - !call fraggle_io_log_regime(impactors, fragments) end select end select end associate