From df77b321cc728b5677bcc3aa31bea7da11bc0dc0 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Fri, 9 Dec 2022 18:22:44 -0500 Subject: [PATCH] Switched fragments and colliders to be allocatables so they get wiped out between collision resolves --- src/modules/symba_classes.f90 | 4 ++-- src/symba/symba_collision.f90 | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/modules/symba_classes.f90 b/src/modules/symba_classes.f90 index f0c7ee340..93640a8d1 100644 --- a/src/modules/symba_classes.f90 +++ b/src/modules/symba_classes.f90 @@ -189,8 +189,8 @@ module symba_classes class(symba_plplenc), allocatable :: plplenc_list !! List of massive body-massive body encounters in a single step class(symba_plplenc), allocatable :: plplcollision_list !! List of massive body-massive body collisions in a single step integer(I4B) :: irec !! System recursion level - type(fraggle_colliders) :: colliders !! Fraggle colliders object - type(fraggle_fragments) :: fragments !! Fraggle fragmentation system object + class(fraggle_colliders), allocatable :: colliders !! Fraggle colliders object + class(fraggle_fragments), allocatable :: fragments !! Fraggle fragmentation system object type(encounter_storage(nframes=:)), allocatable :: encounter_history !! Stores encounter history for later retrieval and saving to file contains procedure :: write_discard => symba_io_write_discard !! Write out information about discarded and merged planets and test particles in SyMBA diff --git a/src/symba/symba_collision.f90 b/src/symba/symba_collision.f90 index 6107e9d12..12822cb07 100644 --- a/src/symba/symba_collision.f90 +++ b/src/symba/symba_collision.f90 @@ -885,21 +885,23 @@ module subroutine symba_resolve_collision_fragmentations(self, system, param) logical :: lgoodcollision integer(I4B) :: i - associate(plplcollision_list => self, ncollisions => self%nenc, idx1 => self%index1, idx2 => self%index2, colliders => system%colliders, fragments => system%fragments, t => system%t) + associate(plplcollision_list => self, ncollisions => self%nenc, idx1 => self%index1, idx2 => self%index2, t => system%t) select type(pl => system%pl) class is (symba_pl) select type (cb => system%cb) class is (symba_cb) do i = 1, ncollisions + allocate(fraggle_colliders :: system%colliders) + allocate(fraggle_fragments :: system%fragments) idx_parent(1) = pl%kin(idx1(i))%parent idx_parent(2) = pl%kin(idx2(i))%parent - lgoodcollision = symba_collision_consolidate_colliders(pl, cb, param, idx_parent, colliders) + lgoodcollision = symba_collision_consolidate_colliders(pl, cb, param, idx_parent, system%colliders) if ((.not. lgoodcollision) .or. any(pl%status(idx_parent(:)) /= COLLISION)) cycle - call colliders%regime(fragments, system, param) + call system%colliders%regime(system%fragments, system, param) if (param%lencounter_save) call system%collision_snap(param, t, "before") - select case (fragments%regime) + select case (system%fragments%regime) case (COLLRESOLVE_REGIME_DISRUPTION, COLLRESOLVE_REGIME_SUPERCATASTROPHIC) plplcollision_list%status(i) = symba_collision_casedisruption(system, param) case (COLLRESOLVE_REGIME_HIT_AND_RUN) @@ -911,6 +913,7 @@ module subroutine symba_resolve_collision_fragmentations(self, system, param) call util_exit(FAILURE) end select if (param%lencounter_save) call system%collision_snap(param, t, "after") + deallocate(system%colliders,system%fragments) end do end select end select