From 3c14d197836378b6fc17619d04a84b8f5e7df406 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Fri, 20 Aug 2021 15:18:55 -0400 Subject: [PATCH] Fixed bug in which the largest body in a collision was misidentified, causing recursion level and info flags to be set incorrectly --- src/symba/symba_collision.f90 | 10 +++++----- src/symba/symba_encounter_check.f90 | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/symba/symba_collision.f90 b/src/symba/symba_collision.f90 index 0e37a307e..af8e09055 100644 --- a/src/symba/symba_collision.f90 +++ b/src/symba/symba_collision.f90 @@ -22,7 +22,7 @@ module function symba_collision_casedisruption(system, param, family, x, v, mass ! Result integer(I4B) :: status !! Status flag assigned to this outcome ! Internals - integer(I4B) :: i, istart, nfrag, ibiggest, nfamily, nstart, nend + integer(I4B) :: i, istart, nfrag, nfamily, nstart, nend real(DP) :: mtot, avg_dens real(DP), dimension(NDIM) :: xcom, vcom, Ip_new real(DP), dimension(2) :: vol @@ -156,7 +156,7 @@ module function symba_collision_casehitandrun(system, param, family, x, v, mass, allocate(rot_frag(NDIM, nfrag)) allocate(Ip_frag(NDIM, nfrag)) m_frag(1) = mass(jtarg) - ibiggest = maxloc(system%pl%Gmass(family(:)), dim=1) + ibiggest = family(maxloc(system%pl%Gmass(family(:)), dim=1)) id_frag(1) = system%pl%id(ibiggest) rad_frag(1) = radius(jtarg) xb_frag(:, 1) = x(:, jtarg) @@ -235,8 +235,8 @@ module function symba_collision_casemerge(system, param, family, x, v, mass, rad class is (symba_pl) write(*, '("Merging bodies ",I8,99(:,",",I8))') pl%id(family(:)) - ibiggest = maxloc(pl%Gmass(family(:)), dim=1) - id_frag(1) = pl%id(family(ibiggest)) + ibiggest = family(maxloc(pl%Gmass(family(:)), dim=1)) + id_frag(1) = pl%id(ibiggest) m_frag(1) = sum(mass(:)) @@ -838,7 +838,7 @@ subroutine symba_collision_mergeaddsub(system, param, family, id_frag, Ip_frag, ! Setup new bodies allocate(plnew, mold=pl) call plnew%setup(nfrag, param) - ibiggest = maxloc(pl%Gmass(family(:)), dim=1) + ibiggest = family(maxloc(pl%Gmass(family(:)), dim=1)) ! Copy over identification, information, and physical properties of the new bodies from the fragment list plnew%id(1:nfrag) = id_frag(1:nfrag) diff --git a/src/symba/symba_encounter_check.f90 b/src/symba/symba_encounter_check.f90 index ff98fe1ce..96e13ebaf 100644 --- a/src/symba/symba_encounter_check.f90 +++ b/src/symba/symba_encounter_check.f90 @@ -40,9 +40,9 @@ module function symba_encounter_check_pl(self, system, dt, irec) result(lany_enc if (lany_encounter) then associate(plplenc_list => system%plplenc_list) call plplenc_list%resize(nenc) - plplenc_list%lvdotr(1:nenc) = pack(loc_lvdotr(:), lencounter(:)) - plplenc_list%index1(1:nenc) = pack(pl%k_plpl(1,:), lencounter(:)) - plplenc_list%index2(1:nenc) = pack(pl%k_plpl(2,:), lencounter(:)) + plplenc_list%lvdotr(1:nenc) = pack(loc_lvdotr(1:nplplm), lencounter(1:nplplm)) + plplenc_list%index1(1:nenc) = pack(pl%k_plpl(1,1:nplplm), lencounter(1:nplplm)) + plplenc_list%index2(1:nenc) = pack(pl%k_plpl(2,1:nplplm), lencounter(1:nplplm)) plplenc_list%id1(1:nenc) = pl%id(plplenc_list%index1(1:nenc)) plplenc_list%id2(1:nenc) = pl%id(plplenc_list%index2(1:nenc)) do k = 1, nenc