Skip to content
This repository was archived by the owner on Aug 28, 2024. It is now read-only.

Commit

Permalink
Added interfaces for fragmentation cases
Browse files Browse the repository at this point in the history
  • Loading branch information
daminton committed Aug 5, 2021
1 parent b274576 commit 11f61d6
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 4 deletions.
36 changes: 36 additions & 0 deletions src/modules/symba_classes.f90
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,30 @@ module function symba_encounter_check_tp(self, system, dt, irec) result(lany_enc
logical :: lany_encounter !! Returns true if there is at least one close encounter
end function symba_encounter_check_tp

module function symba_fragmentation_casedisruption(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss) result(status)
implicit none
class(symba_nbody_system), intent(inout) :: system !! SyMBA nbody system object
class(symba_parameters), intent(in) :: param !! Current run configuration parameters with SyMBA additions
integer(I4B), dimension(:), intent(in) :: family !! List of indices of all bodies inovlved in the collision
real(DP), dimension(:,:), intent(inout) :: x, v, L_spin, Ip !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass, radius !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass_res !! The distribution of fragment mass obtained by the regime calculation
real(DP), intent(inout) :: Qloss !! Energy lost during collisionn
integer(I4B) :: status !! Status flag assigned to this outcome
end function symba_fragmentation_casedisruption

module function symba_fragmentation_casehitandrun(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss) result(status)
implicit none
class(symba_nbody_system), intent(inout) :: system !! SyMBA nbody system object
class(symba_parameters), intent(in) :: param !! Current run configuration parameters with SyMBA additions
integer(I4B), dimension(:), intent(in) :: family !! List of indices of all bodies inovlved in the collision
real(DP), dimension(:,:), intent(inout) :: x, v, L_spin, Ip !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass, radius !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass_res !! The distribution of fragment mass obtained by the regime calculation
real(DP), intent(inout) :: Qloss !! Energy lost during collision
integer(I4B) :: status !! Status flag assigned to this outcome
end function symba_fragmentation_casehitandrun

module function symba_fragmentation_casemerge(system, param, family, x, v, mass, radius, L_spin, Ip) result(status)
implicit none
class(symba_nbody_system), intent(inout) :: system !! SyMBA nbody system object
Expand All @@ -285,6 +309,18 @@ module function symba_fragmentation_casemerge(system, param, family, x, v, mass,
integer(I4B) :: status !! Status flag assigned to this outcome
end function symba_fragmentation_casemerge

module function symba_fragmentation_casesupercatastrophic(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss) result(status)
implicit none
class(symba_nbody_system), intent(inout) :: system !! SyMBA nbody system object
class(symba_parameters), intent(in) :: param !! Current run configuration parameters with SyMBA additions
integer(I4B), dimension(:), intent(in) :: family !! List of indices of all bodies inovlved in the collision
real(DP), dimension(:,:), intent(inout) :: x, v, L_spin, Ip !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass, radius !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass_res !! The distribution of fragment mass obtained by the regime calculation
real(DP), intent(inout) :: Qloss !! Energy lost during collision
integer(I4B) :: status !! Status flag assigned to this outcome
end function symba_fragmentation_casesupercatastrophic

module subroutine symba_io_write_discard(self, param)
use swiftest_classes, only : swiftest_parameters
implicit none
Expand Down
8 changes: 4 additions & 4 deletions src/symba/symba_collision.f90
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ module subroutine symba_collision_resolve_fragmentations(self, system, param)
real(DP), dimension(NDIM) :: x1_si, v1_si, x2_si, v2_si
real(DP) :: mlr, mslr, mtot, dentot, msys, msys_new, Qloss, impact_parameter
integer(I4B), parameter :: NRES = 3 !! Number of collisional product results
real(DP), dimension(NRES) :: mass_res
real(DP), dimension(NRES) :: mass_res

associate(plpl_collisions => self, ncollisions => self%nenc, idx1 => self%index1, idx2 => self%index2, cb => system%cb)
select type(pl => system%pl)
Expand Down Expand Up @@ -468,11 +468,11 @@ module subroutine symba_collision_resolve_fragmentations(self, system, param)

select case (regime)
case (COLLRESOLVE_REGIME_DISRUPTION)
!status = symba_fragmentation_casedisruption(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss)
status = symba_fragmentation_casedisruption(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss)
case (COLLRESOLVE_REGIME_SUPERCATASTROPHIC)
!status = symba_fragmentation_casesupercatastrophic(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss)
status = symba_fragmentation_casesupercatastrophic(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss)
case (COLLRESOLVE_REGIME_HIT_AND_RUN)
!status = symba_fragmentation_casehitandrun(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss)
status = symba_fragmentation_casehitandrun(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss)
case (COLLRESOLVE_REGIME_MERGE, COLLRESOLVE_REGIME_GRAZE_AND_MERGE)
status = symba_fragmentation_casemerge(system, param, family, x, v, mass, radius, L_spin, Ip)
case default
Expand Down
72 changes: 72 additions & 0 deletions src/symba/symba_fragmentation.f90
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,54 @@
use swiftest
contains

module function symba_fragmentation_casedisruption(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss) result(status)
!! author: Jennifer L.L. Pouplin, Carlisle A. Wishard, and David A. Minton
!!
!! Create the fragments resulting from a non-catastrophic disruption collision
!!
implicit none
! Arguments
class(symba_nbody_system), intent(inout) :: system !! SyMBA nbody system object
class(symba_parameters), intent(in) :: param !! Current run configuration parameters with SyMBA additions
integer(I4B), dimension(:), intent(in) :: family !! List of indices of all bodies inovlved in the collision
real(DP), dimension(:,:), intent(inout) :: x, v, L_spin, Ip !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass, radius !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass_res !! The distribution of fragment mass obtained by the regime calculation
real(DP), intent(inout) :: Qloss !! Energy lost during collision
! Result
integer(I4B) :: status !! Status flag assigned to this outcome
! Internals

status = DISRUPTION

return
end function symba_fragmentation_casedisruption


module function symba_fragmentation_casehitandrun(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss) result(status)
!! author: Jennifer L.L. Pouplin, Carlisle A. Wishard, and David A. Minton
!!
!! Create the fragments resulting from a non-catastrophic hit-and-run collision
!!
implicit none
! Arguments
class(symba_nbody_system), intent(inout) :: system !! SyMBA nbody system object
class(symba_parameters), intent(in) :: param !! Current run configuration parameters with SyMBA additions
integer(I4B), dimension(:), intent(in) :: family !! List of indices of all bodies inovlved in the collision
real(DP), dimension(:,:), intent(inout) :: x, v, L_spin, Ip !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass, radius !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass_res !! The distribution of fragment mass obtained by the regime calculation
real(DP), intent(inout) :: Qloss !! Energy lost during collision
! Result
integer(I4B) :: status !! Status flag assigned to this outcome
! Internals

status = HIT_AND_RUN

return
end function symba_fragmentation_casehitandrun


module function symba_fragmentation_casemerge(system, param, family, x, v, mass, radius, L_spin, Ip) result(status)
!! author: Jennifer L.L. Pouplin, Carlisle A. Wishard, and David A. Minton
!!
Expand Down Expand Up @@ -134,4 +182,28 @@ module function symba_fragmentation_casemerge(system, param, family, x, v, mass,

end function symba_fragmentation_casemerge


module function symba_fragmentation_casesupercatastrophic(system, param, family, x, v, mass, radius, L_spin, Ip, mass_res, Qloss) result(status)
!! author: Jennifer L.L. Pouplin, Carlisle A. Wishard, and David A. Minton
!!
!! Create the fragments resulting from a supercatastrophic collision
!!
implicit none
! Arguments
class(symba_nbody_system), intent(inout) :: system !! SyMBA nbody system object
class(symba_parameters), intent(in) :: param !! Current run configuration parameters with SyMBA additions
integer(I4B), dimension(:), intent(in) :: family !! List of indices of all bodies inovlved in the collision
real(DP), dimension(:,:), intent(inout) :: x, v, L_spin, Ip !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass, radius !! Input values that represent a 2-body equivalent of a possibly 2+ body collision
real(DP), dimension(:), intent(inout) :: mass_res !! The distribution of fragment mass obtained by the regime calculation
real(DP), intent(inout) :: Qloss !! Energy lost during collision
! Result
integer(I4B) :: status !! Status flag assigned to this outcome
! Internals

status = SUPERCATASTROPHIC

return
end function symba_fragmentation_casesupercatastrophic

end submodule s_symba_fragmentation

0 comments on commit 11f61d6

Please sign in to comment.