This web page contains C/C++ code for terahertz (THz) propagation in practical experimental geometries. The article for which this code was written, "Simple Method for Calculating the Propagation of THz Radiation In Experimental Geometries" (D. Côté, J.E. Sipe, H.M. van Driel), has been published in JOSA B and is available in preprint form below. The purpose of the formalism is to allow calculations of the THz radiation arising from any current (think photoconductive antennas) or polarization source (think rectification and other nonlinear mixing). It considers near and far fields, dispersion, reflections from interfaces as well as the important case where a THz beam is collimated, then refocused with two identical mirrors (i.e. focus-to-tocus propagation). It does all of that without using finite-difference methods: everything is "simple" analytical expressions. The computer code is required to perform an integral that cannot be done analytically and to use the index of refraction from published sources. One could even think of implementing the article's equations in Mathematica or Maple.

Executive summary

Let me make a point clear (stated in the conclusion of the paper, but I want to emphasize it): the only equations that will matter to most people are (51) and (60). Everything else is a "tutorial" that describes how to get there. The computer program implements everything you need and want (unless you use a different geometry than the one in the paper, and most people aren't). You provide the spot size, optical pump pulse width, what materials you are in (ZnTe, GaP, GaAs supported), and you run the program. Done. The paper does look daunting. Feel free to send me emails for clarifications questions, comments at Daniel Côt?eacute; at

Any questions regarding the formalism (equations, notation, clarifications) or the code (compiling, running, modifying) should be sent to Daniel Côté at

Code and article

The article "Simple Method for Calculating the Propagation of THz Radiation In Experimental Geometries" JOSA B, Vol. 20 Issue 6 Page 1374 (June 2003), (D. Côté, J.E. Sipe, H.M. van Driel) can be downloaded here.

The code is standard ANSI C++ and will compile and run on any computer (Unix, Windows, Macintosh) with a C++ compiler that is ANSI compliant. It has been written and tested on Mac OS X (Codewarrior and GCC 3.1) but compiles and runs on any variety of Unix with GCC 3.1 or later (SGI's CC compiler and GCC 3.2 were tested). GCC 2.95 (with several old Linux distributions) will not work. The code can be downloaded in various formats :

You will find a standard configure & makefile script (for Unix) as well as a Mac OS Project Builder and Codewarrior project.