You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Orbits/julia_code/Module/src/physical_model.jl

82 lines
2.3 KiB
Julia

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#=Satellite State=#
abstract type State end
struct SingleStates <: State
stocks::Vector{Float32}
debris::Vector{Float32}
end
struct MultiStates <: State
stocks::Array{Float32}
debris::Array{Float32}
end
#function state_to_tuple(s::State)
# return (s.stocks ,s.debris)
#end
#=Physical Model
This contains parameters describing the physical model.
=#
abstract type PhysicalModel end
#=Basic implementation of a physical model=#
struct BasicPhysics <: PhysicalModel
#rate at which debris hits satellites
debris_collision_rate::Real
#rate at which satellites of different constellations collide
satellite_collision_rates::Matrix{Float64}
#rate at which debris exits orbits
decay_rate::Real
#rate at which satellites
autocatalysis_rate::Real
#ratio at which a collision between satellites produced debris
satellite_collision_debris_ratio::Real
#Ratio at which launches produce debris
launch_debris_ratio::Real
end
function state_transition(
physics::BasicPhysics
,state::State
,launches::Vector{Float32}
,survival_rate::Function
)
#=
Physical Transitions
=#
survival_rates = survival_rate(state,physics)
# Debris transitions
# get changes in debris from natural dynamics
natural_debris_dynamics = (1 - physics.decay_rate + physics.autocatalysis_rate) * state.debris
# get changes in debris from satellite loss
satellite_loss_debris = physics.satellite_collision_debris_ratio * (1 .- survival_rates)' * state.stocks
# get changes in debris from launches
launch_debris = physics.launch_debris_ratio * sum(launches)
# total debris level
debris = natural_debris_dynamics .+ satellite_loss_debris .+ launch_debris
# Stocks Transitions
stocks = (LinearAlgebra.diagm(survival_rates) .- physics.decay_rate)*state.stocks + launches
return State(stocks,debris)
end
function survival_rates_1(
#This function describes the rate at which satellites survive each period.
state::State
,physical_model::BasicPhysics
)
#TODO! get this to broadcast correctly.
return exp.(-(physical_model.satellite_collision_rates .+ physical_model.decay_rate) * state.stocks .- (physical_model.debris_collision_rate * state.debris))
end