// Program to find the time spent falling through a hole in the earth assuming
// a non-uniform earth.  The density of the earth is modeled using a linear
// range of densities starting from 2.2 g/cm^3 at the surface and going to
// 13.0 g/cm^3 at the core.  There is a small "fudge-factor" to make this
// integrated density equal the known mass of the earth.

// This program is written in Frink:
//  https://frinklang.org/
//
// Alan Eliasen, eliasen@mindspring.com

earthdensity := earthmass / (4/3 pi earthradius^3)

// This finds the mass that's still below you at a given distance from the
// earth's center.
mass[dist is length] := dist^3 21.4938 1.0748347372 ((2.2-13.0) dist/earthradius  + 13.0) g/cm^3 / 2.2

// Find the acceleration at a given distance from the core.
a[dist is length] := G mass[dist]/dist^2

var v is velocity = 0 m/s         // Velocity at end of timestep
var stepsize is time = 1/100 s
var d is length = earthradius
var t is time = 0 s
var a is acceleration = 0 gravity

while (d > 0 m)
{
t = t + stepsize
a = a[d]
v = v + a stepsize
d = d - v stepsize

// Print results every second
if (t mod sec == 0 s)
println[(t -> sec) + "\t" + (d->km) + "\t" + (v->mph) + "\t" + (a->m/s^2)]
}

// Print final times
println[(1. t -> ["min", "sec"]) + "\t, " + (v->"mph")]

This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 18321 days, 23 hours, 43 minutes ago.