Personal Web Site

Contact Me

Purdue Site
Moon Rocks
S-M Comics
Mouse Site
Art Gallery


Here's some software I've written, which you can download for free. These are mostly small, stand-alone programs; just download the source code and compile. Enjoy!

Scientific Software

  • Linear Regression (PGCC)
  • linreg.f90 - Linear regression (Fortran-90 subroutine)
  • e2v.f90 - Convert particle energy to velocity (Fortran-90)
  • v2e.f90 - Convert particle velocity to energy (Fortran-90)
  • e2t.f90 - Convert energy to temperature (Fortran-90)
  • t2e.f90 - Convert particle temperature to energy (Fortran-90)
  • cg.f90 - Calculate Clebsch-Gordan coefficients (Fortran-90)
    Based on equations from Numerical Table of Clebsch-Gordan Coefficients by Benjamin E. Chi, 1962.
    • Introductory material from Chi's book
    • Fortran-95 program cgtable.f95 to reproduce Chi's tables
    • Text file of tables from Chi's book, reproduced using program cgtable.f95
    • PDF file of a reproduction of Chi's book, including introductory material and reproduced tables

Celestial Mechanics

Mathematical Software

  • anglevec.f90 - Find separation angle between two vectors (Fortran-90)
  • auxtrig.f90 - Auxiliary trigonometric functions (Fortran-90 module)
  • crossprd.f90 - Vector cross product (Fortran-90 subroutine)
  • cuberoot.f90 - Cube root (Fortran-90 function)
  • dec2frac.f95 - Convert a decimal number to a fraction (Fortran-95)
  • frac.f90 - Fractional part of a number (Fortran-90 function)
  • fraction.f90 - Fraction data type (Fortran-90 module)
  • invhyp.f90 - Inverse hyperbolic functions (Fortran-90 module)
  • linterpol.f90 - Piecewise linear interpolation (Fortran-90 function)
  • m22det.f90 - Determinant of a 2×2 matrix (Fortran-90)
  • m22inv.f90 - Inverse of a 2×2 matrix (Fortran-90)
  • m33det.f90 - Determinant of a 3×3 matrix (Fortran-90)
  • m33inv.f90 - Inverse of a 3×3 matrix (Fortran-90)
  • m44det.f90 - Determinant of a 4×4 matrix (Fortran-90)
  • m44inv.f90 - Inverse of a 4×4 matrix (Fortran-90)
  • m55det.f90 - Determinant of a 5×5 matrix (Fortran-90)
  • m55inv.f90 - Inverse of a 5×5 matrix (Fortran-90)
  • m66det.f90 - Determinant of a 6×6 matrix (Fortran-90)
  • m66inv.f90 - Inverse of a 6×6 matrix (Fortran-90)
  • quadfit.f90 - Quadratic curve fit (Fortran-90 subroutine)
  • rand-normal.f90 - Random number, normal distribution (Fortran-90 subroutine)
  • reduce.f90 - Reduction of an angle (Fortran-90)
  • rpn.f95 - A powerful RPN calculator (Fortran-95)
  • sround.f90 - Statistical rounding function (Fortran-90 function):

Calendar Calculations

  • holidays.f90 - Holidays (Fortran-90)
  • fedholidays.f90 - Federal holidays (Fortran-90)
  • cal.f90 - Calendar program (similar to UNIX "cal") (Fortran-90)
  • caljul.f90 - Calendar program for Julian calendar (similar to UNIX "cal") (Fortran-90)
  • bigcal.f90 - Program for printing large one-month calendars (Fortran-90)
  • greg2jd.f90 - Gregorian date to Julian day (Fortran-90)
  • jd2greg.f90 - Julian day to Gregorian date (Fortran-90)
  • doy2greg.f90 - Day of year to Gregorian date (Fortran-90)
  • greg2doy.f90 - Gregorian date to day of year (Fortran-90)
  • greg2dow.f90 - Gregorian date to day of week (Fortran-90)
  • leapyr.f90 - Leap year (Fortran-90)
  • easter.for - Date of Easter (Fortran-77)
  • julianday.f90 - Generate Julian day tables (Fortran-90)
  • doy.f90 - Generate day-of-year tables (Fortran-90)
  • Display the current date, time, day of year, and Julian day:
    • jd.c - C version
    • jd.f90 - Fortran-90 version

Computer Programming Languages


  • fix2free.f90 - Convert Fortran fixed to free format (Fortran-90)
  • chcase.f90 - Convert strings to uppercase or lowercase (Fortran-90)
  • toupper.f90 - Convert a file to uppercase (Fortran-90)
  • tolower.f90 - Convert a file to lowercase (Fortran-90)
  • dispcr.c - Display end-of-line characters (C)
  • replcr.c - Convert end-of-line characters (C)
  • replcrb.c - Convert end-of-line characters (batch version) (C)
  • datatest.c - Display C data type sizes (C)
  • Reverse byte order of a variable:
  • timer.f90 - Compute elapsed time (Fortran-90 module)
  • utf8.f90 - Display UTF-8 encoding of Unicode characters (Fortran-90)
  • Display whether computer is little- or big-endian:
  • Convert IEEE floating-point numbers to/from hex integers:
    • ieee.c - Single precision (C)
    • ieee.f90 - Single precision (Fortran-90)
    • dieee.c - Double precision (C)
    • dieee.f90 - Double precision (Fortran-90)
  • hexdump.f90 - Dump file contents in hex (Fortran-90)
  • octdump.f90 - Dump file contents in octal (Fortran-90)
  • filesize.f90 - Determine the size of a file (Fortran-90 subroutine)
  • inquireu.f90 - Inquire file by unit (Fortran-90 subroutine)
  • inquiref.f90 - Inquire file by file name (Fortran-90 subroutine)
  • naninf.f90 - Detect ±Inf and Nan floats (Fortran-90 functions)
  • Return EBCDIC character, given index:
  • Return index for given EBCDIC character:



Miscellaneous Software

  • roman.f90 - Roman numerals (Fortran-90)
  • isbn10.f90 - Compute ISBN-10 check digit (Fortran-90)
  • isbn13.f90 - Compute ISBN-13 check digit (Fortran-90)
  • marathon.f90 - Compute marathon training schedule (Fortran-90)
  • pace.f90 - Compute running pace (Fortran-90)
  • Fortune cookie program:
I'm most fluent in the Fortran and C computer programming languages. I also spent several years at NASA writing assembly language code for spacecraft on-board computers (the NSSC-I and DF-224).


These are the most useful commercial software applications I use:
  • Take Command command-line shell, by JP Software
  • TSE Pro text editor, by SemWare
  • Lahey Fortran-95 compiler, by Lahey
  • OriginPro plotting program, by OriginLab
  • PCTeX typesetting program, by PCTeX

Contact Information

I may be contacted at:

All software Copyright © 2006 David G. Simpson


Webmaster: David G. Simpson
Page last updated: February 21, 2021.