CalculusWithJuliaNotes.jl/CwJ/TODO/earth.jl
2022-05-24 13:51:49 -04:00

31 lines
1.5 KiB
Julia
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Calculate the temperature of the earth using the simplest model
# @jake
# https://discourse.julialang.org/t/seven-lines-of-julia-examples-sought/50416/121
using Unitful, Plots
p_sun = 386e24u"W" # power output of the sun
radius_a = 6378u"km" # semi-major axis of the earth
radius_b = 6357u"km" # semi-minor axis of the earth
orbit_a = 149.6e6u"km" # distance from the sun to earth
orbit_e = 0.017 # eccentricity of r = a(1-e^2)/(1+ecos(θ)) & time ≈ 365.25 * θ / 360 where θ is in degrees
a = 0.75 # absorptivity of the sun's radiation
e = 0.6 # emmissivity of the earth (very dependent on cloud cover)
σ = 5.6703e-8u"W*m^-2*K^-4" # Stefan-Boltzman constant
temp_sky = 3u"K" # sky temperature
t = (0:0.25:365.25)u"d" # day of year in 1/4 day increments
θ = 2*π/365.25u"d" .* t # approximate angle around the sun
r = orbit_a * (1-orbit_e^2) ./ (1 .+ orbit_e .* cos.(θ)) # distance from sun to earth
area_projected = π * radius_a * radius_b # area of earth facing the sun
ec = sqrt(1-radius_b^2/radius_a^2) # eccentricity of earth
area_surface = 2*π*radius_a^2*(1 + radius_b^2/(ec*radius_b^2)*atanh(ec)) # surface area of the earth
q_in = p_sun * a * area_projected ./ (4 * π .* r.^2) # total heat impacting the earth
temp_earth = (q_in ./ (e*σ*area_surface) .+ temp_sky^4).^0.25 # temperature of the earth
plot(t*u"d^-1", temp_earth*u"K^-1" .- 273.15, label = false, title = "Temperature of Earth", xlabel = "Day", ylabel = "Temperature [C]")