# StarTram.frink

``` /** This program calculates the drag through the atmosphere of the StarTram     design:       https://en.wikipedia.org/wiki/StarTram */ use StandardAtmosphere.frink getDensity[altitude] := {    [temp, pressure] = StandardAtmosphere.getTemperatureAndPressure[altitude]    return StandardAtmosphere.getDensity[altitude, temp, pressure] } getDensityVelocitySquaredProduct[altitude, velocity] := {    getDensity[altitude] * velocity^2 } altitude = 6000 m  // Top of evacuated tunnel v = 8.8 km/s       // Fast enough for orbital velocity (with corrective burn) mass = 40 tons Frocket =  0 N     // StarTram is ballistic, no rocket thrust. target = 350 km Cd = 0.09 A = pi (1 m)^2    // 33 ft^2 launchAngle = 90 degrees   // We'll call 90 degrees straight up. timestep = .01 s t = 0 s Esum = 0 J while (altitude < target) {    density = getDensity[altitude]    Fdrag = 1/2 density v^2 A Cd    weight = G earthmass mass / (altitude + earthradius)^2   // Correct weight for decreasing gravity    Fup = Frocket - Fdrag - weight    a = Fup/mass                                             // Actual upward acceleration    vnew = v + a timestep    vave = (v + vnew) / 2    stepdist = vave * timestep    Esum = Esum + Fdrag * stepdist         // Energy lost this timestep    println[(t->"s") + "\t" + format[altitude,"km", 3] + "\t" + format[v, "mach", 2] + "\t" + format[a,"gee",3] + "\t" + format[Fdrag, "lbf", 5] + "\t" + format[Esum, "MJ", 2]]        v = vnew    // TODO:  Refine this to model changing distance around earth's curve.    altitude = altitude + stepdist sin[launchAngle]    t = t + timestep } ```

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 19092 days, 8 hours, 9 minutes ago.