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

Commit

Permalink
Started the processes of moving what used to be the simple disruption…
Browse files Browse the repository at this point in the history
… model into Fraggle. Success criteria not being evaluated properly yet
  • Loading branch information
daminton committed Dec 30, 2022
1 parent 32e2fc2 commit 4eecf34
Show file tree
Hide file tree
Showing 10 changed files with 595 additions and 1,170 deletions.
4 changes: 2 additions & 2 deletions examples/Fragmentation/Fragmentation_Movie.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@

body_Gmass = {"disruption_headon" : [1e-7, 1e-10],
"disruption_off_axis" : [1e-7, 1e-10],
"supercatastrophic_headon": [1e-7, 1e-8],
"supercatastrophic_headon" : [1e-7, 1e-8],
"supercatastrophic_off_axis": [1e-7, 1e-8],
"hitandrun_disrupt" : [1e-7, 7e-10],
"hitandrun_pure" : [1e-7, 7e-10]
Expand Down Expand Up @@ -236,7 +236,7 @@ def data_stream(self, frame=0):
# Set fragmentation parameters
minimum_fragment_gmass = 0.2 * body_Gmass[style][1] # Make the minimum fragment mass a fraction of the smallest body
gmtiny = 0.99 * body_Gmass[style][1] # Make GMTINY just smaller than the smallest original body. This will prevent runaway collisional cascades
sim.set_parameter(collision_model="disruption", encounter_save="both", gmtiny=gmtiny, minimum_fragment_gmass=minimum_fragment_gmass, verbose=False)
sim.set_parameter(collision_model="fraggle", encounter_save="both", gmtiny=gmtiny, minimum_fragment_gmass=minimum_fragment_gmass, verbose=False)
sim.run(dt=1e-3, tstop=1.0e-3, istep_out=1, dump_cadence=0)

print("Generating animation")
Expand Down
8 changes: 4 additions & 4 deletions python/swiftest/swiftest/simulation_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ def __init__(self,read_param: bool = False, read_old_output: bool = False, simdi
general_relativity : bool, default True
Include the post-Newtonian correction in acceleration calculations.
Parameter input file equivalent: `GR`
collision_model: {"MERGE","BOUNCE","SIMPLE","FRAGGLE"}, default "MERGE"
collision_model: {"MERGE","BOUNCE","FRAGGLE"}, default "MERGE"
This is used to set the collision/fragmentation model. [TODO: DESCRIBE THESE]
This argument only applies to Swiftest-SyMBA simulations. It will be ignored otherwise.
Parameter input file equivalent: `COLLISION_MODEL`
Expand Down Expand Up @@ -1015,7 +1015,7 @@ def get_integrator(self,arg_list: str | List[str] | None = None, verbose: bool |
def set_feature(self,
close_encounter_check: bool | None = None,
general_relativity: bool | None = None,
collision_model: Literal["MERGE","BOUNCE","SIMPLE","FRAGGLE"] | None = None,
collision_model: Literal["MERGE","BOUNCE","FRAGGLE"] | None = None,
minimum_fragment_gmass: float | None = None,
minimum_fragment_mass: float | None = None,
rotation: bool | None = None,
Expand Down Expand Up @@ -1048,7 +1048,7 @@ def set_feature(self,
*WARNING*: Enabling this feature could lead to very large files.
general_relativity : bool, optional
Include the post-Newtonian correction in acceleration calculations.
collision_model: {"MERGE","BOUNCE","SIMPLE","FRAGGLE"}, default "MERGE"
collision_model: {"MERGE","BOUNCE","FRAGGLE"}, default "MERGE"
This is used to set the collision/fragmentation model. [TODO: DESCRIBE THESE]
This argument only applies to Swiftest-SyMBA simulations. It will be ignored otherwise.
Parameter input file equivalent: `COLLISION_MODEL`
Expand Down Expand Up @@ -1129,7 +1129,7 @@ def set_feature(self,
self.param["GR"] = general_relativity
update_list.append("general_relativity")

fragmentation_models = ["FRAGGLE", "SIMPLE"]
fragmentation_models = ["FRAGGLE"]
if collision_model is not None:
collision_model = collision_model.upper()
fragmentation = collision_model in fragmentation_models
Expand Down
421 changes: 12 additions & 409 deletions src/collision/collision_generate.f90

Large diffs are not rendered by default.

72 changes: 1 addition & 71 deletions src/collision/collision_module.f90
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,6 @@ module collision
procedure :: reset => collision_util_reset_fragments !! Deallocates all allocatable arrays and sets everything else to 0
procedure :: get_angular_momentum => collision_util_get_angular_momentum !! Calcualtes the current angular momentum of the fragments
procedure :: get_kinetic_energy => collision_util_get_kinetic_energy !! Calcualtes the current kinetic energy of the fragments
procedure :: set_spins => collision_util_set_spins !! Calcualtes the spins of all fragments from the angular momentum budget and residual
final :: collision_final_fragments !! Finalizer deallocates all allocatables
end type collision_fragments

Expand Down Expand Up @@ -168,13 +167,7 @@ module collision
final :: collision_final_bounce !! Finalizer will deallocate all allocatables
end type collision_bounce

type, extends(collision_basic) :: collision_disruption
contains
procedure :: generate => collision_generate_disruption !! A simple disruption models that does not constrain energy loss in collisions
procedure :: disrupt => collision_generate_disrupt !! Disrupt the colliders into the fragments
procedure :: set_mass_dist => collision_util_set_mass_dist !! Sets the distribution of mass among the fragments depending on the regime type
final :: collision_final_simple !! Finalizer will deallocate all allocatables
end type collision_disruption



!! NetCDF dimension and variable names for the enounter save object
Expand Down Expand Up @@ -236,14 +229,6 @@ module subroutine collision_generate_bounce(self, nbody_system, param, t)
real(DP), intent(in) :: t !! The time of the collision
end subroutine collision_generate_bounce

module subroutine collision_generate_disrupt(self, nbody_system, param, t, lfailure)
implicit none
class(collision_disruption), intent(inout) :: self
class(base_nbody_system), intent(inout) :: nbody_system !! Swiftest nbody system object
class(base_parameters), intent(inout) :: param !! Current run configuration parameters with SyMBA additions
real(DP), intent(in) :: t !! Time of collision
logical, optional, intent(out) :: lfailure !! Disruption failed
end subroutine collision_generate_disrupt

module subroutine collision_generate_hitandrun(self, nbody_system, param, t)
implicit none
Expand All @@ -261,28 +246,6 @@ module subroutine collision_generate_merge(self, nbody_system, param, t)
real(DP), intent(in) :: t !! The time of the collision
end subroutine collision_generate_merge

module subroutine collision_generate_disruption(self, nbody_system, param, t)
implicit none
class(collision_disruption), intent(inout) :: self !! Simple fragment nbody_system object
class(base_nbody_system), intent(inout) :: nbody_system !! Swiftest nbody system object
class(base_parameters), intent(inout) :: param !! Current run configuration parameters
real(DP), intent(in) :: t !! The time of the collision
end subroutine collision_generate_disruption

module subroutine collision_generate_disruption_pos_vec(collider)
implicit none
class(collision_disruption), intent(inout) :: collider !! Collision system object
end subroutine collision_generate_disruption_pos_vec

module subroutine collision_generate_disruption_rot_vec(collider)
implicit none
class(collision_basic), intent(inout) :: collider !! Collision system object
end subroutine collision_generate_disruption_rot_vec

module subroutine collision_generate_disruption_vel_vec(collider)
implicit none
class(collision_disruption), intent(inout) :: collider !! Collision system object
end subroutine collision_generate_disruption_vel_vec

module subroutine collision_io_collider_message(pl, collidx, collider_message)
implicit none
Expand Down Expand Up @@ -446,17 +409,6 @@ module subroutine collision_util_set_coordinate_impactors(self)
class(collision_impactors), intent(inout) :: self !! collisional system
end subroutine collision_util_set_coordinate_impactors

module subroutine collision_util_set_mass_dist(self, param)
implicit none
class(collision_disruption), intent(inout) :: self !! Simple disruption collision object
class(base_parameters), intent(in) :: param !! Current Swiftest run configuration parameters
end subroutine collision_util_set_mass_dist

module subroutine collision_util_set_spins(self)
implicit none
class(collision_fragments(*)), intent(inout) :: self !! Collision fragment system object
end subroutine collision_util_set_spins

module subroutine collision_util_setup_collider(self, nbody_system)
implicit none
class(collision_basic), intent(inout) :: self !! Encounter collision system object
Expand Down Expand Up @@ -534,7 +486,6 @@ subroutine collision_final_fragments(self)
return
end subroutine collision_final_fragments


subroutine collision_final_impactors(self)
!! author: David A. Minton
!!
Expand All @@ -548,7 +499,6 @@ subroutine collision_final_impactors(self)
return
end subroutine collision_final_impactors


subroutine collision_final_netcdf_parameters(self)
!! author: David A. Minton
!!
Expand All @@ -562,7 +512,6 @@ subroutine collision_final_netcdf_parameters(self)
return
end subroutine collision_final_netcdf_parameters


subroutine collision_final_plpl(self)
!! author: David A. Minton
!!
Expand All @@ -589,7 +538,6 @@ subroutine collision_final_pltp(self)
return
end subroutine collision_final_pltp


subroutine collision_final_snapshot(self)
!! author: David A. Minton
!!
Expand All @@ -603,7 +551,6 @@ subroutine collision_final_snapshot(self)
return
end subroutine collision_final_snapshot


subroutine collision_final_storage(self)
!! author: David A. Minton
!!
Expand All @@ -621,7 +568,6 @@ subroutine collision_final_storage(self)
return
end subroutine collision_final_storage


subroutine collision_final_bounce(self)
!! author: David A. Minton
!!
Expand All @@ -637,21 +583,5 @@ subroutine collision_final_bounce(self)
return
end subroutine collision_final_bounce


subroutine collision_final_simple(self)
!! author: David A. Minton
!!
!! Finalizer will deallocate all allocatables
implicit none
! Arguments
type(collision_disruption), intent(inout) :: self !! Collision system object

call self%reset()
if (allocated(self%impactors)) deallocate(self%impactors)
if (allocated(self%fragments)) deallocate(self%fragments)

return
end subroutine collision_final_simple

end module collision

Loading

0 comments on commit 4eecf34

Please sign in to comment.