Jump to the content

Laser Physics and Nonlinear Optics
Department of Science & Technology

  LPNO website -> Research -> Paraxial optical wave propagation
 
 
Home University of Twente
Home Mesa+ Institute
Home
Research
Solid Media
Free electron systems
Bound electron systems
Laser Safety
Education
Members
Publications
Vacancies
News
Colloquia
Links
Route/Contact

Paraxial optical wave propagation


  • Peter van der Slot - Scientific staff

  • Jaap Karssenberg - former member


  • Paraxial wave propagation in laser oscillators

    Content

    Research description
    The optical propagation code
    Changes
    Known bugs
    References


    Research description

    We have developed an Optical Propagation Code that propagates an arbitrary radiation wave, in the paraxial approximation, through a complex optical system from input plane to output plane. Three different propagation methods are available, namely the Spectral Method, the Fresnel Diffraction Integral and the Modified Fresnel Diffraction Integral that includes the ABCD matrix of the optical system between input and output plane. We have successfully combined our optical propagation code with Genesis 1.3 and Medusa to simulate FEL oscillators, where Genesis 1.3 or Medusa is responsible for the modeling of the interaction of the radiation wave with the electron beam within the undulator. Contact Henry Freund for running Medusa in combination with OPC. Note that other models for the FEL gain medium - and even models for different gain media, such as solid state laser crystals - can be used in combination with the optical propagation code. The Perl scripting language is used to control the program flow and create a flexible scripting interface to define both simple and complex resonators configurations.

    Move to top


    The optical propagation code


    Installation

    Download the file Physics-OPC-0.7.3.tar.gz. Unpack the file and read the README file. This file contains brief instructions on compilation of the code. See the manual for more information. If not already installed, download and install Genesis 1.3 using the instructions supplied with this program. If not already installed, download and install a Perl Interpreter. If not already installed, download and install FFTW. So far we have tested the distribution on unix systems and MS Windows systems. Note that the user may have to adjust the 'Makefile' in the 'optics' subdirectory to implement the fortran compiler used on the Windows system (do this before running make in the Physics-OPC-x.x.x directory).


    Test the distribution

    The distribution contains a sample script diffraction.pl that calculates the diffraction on a square aperture. Run this script to test the installation. The script produces an .dfl and .txt file. If you have Gnuplot installed you can run "./plot.pl -plottype=cross_slice -file_in=diffraction.cross.txt" to have a look at the diffraction pattern. This problem can also be solved analytically, so you can compare the numerical solution to the analytical one. See the manual or standard text books (see references) for details on the analytical solution.


    Manual

    The distribution contains a manual in the 'manual' subdirectory. This manual is also available for download. We appreciate feedback and comments to improve the manual. At this time the manual mostly covers unix systems.


    Changes


    VersionChanges
    0.7.3June 25, 2009
    - Due to an issue with MPICH2 on Windows system, added interfaces for the FFTW subroutines.
    - To get the integer type right for the plan variable for the FFTW routines on 32- and 64-bit operating systems, the ISO_C_BINDING module is used for the gfortran compiler. This requires version 4.3 or later. To be compatible with older ifort compilers, a different method is implemented for this compiler.
    - The use of fortran 90 in combination with the fortran 77 wrappers for FFTW results on some systems in segementation faults. By rewriting the code to avoid calling one of the FFTW routines this does not seem to happen any more.
    - Currently, no 64 bit FFTW library is available for WIN64 bit systems. The distribution will be updated with this library once it becomes available again.
    - A problem has been detected when using OpenMPI version 1.3.2 in combination with Genesis 1.3. Passing the input file to Genesis by the Perl script does not work any more. Bug fix: replace the input.f file in the genesis source directory by the one present in the optics directory and recompile genesis. Go to the directory lib/OPC in the OPC tree and rename the file Genesis.pm to Genesis.pm.single. Then copy Genesis.pm.mpi to Genesis.pm
    0.7.2June 10, 2009
    - Changed whole array assignment (a=b, where a and b are two-dimensional arrays) due to a segmentation fault when using the ifort compiler in combination with large array sizes. This problem is not present when using the gfortran compiler.
    - A wrong IO unit number caused the propagation to be aborted after the opld command. This bug is corrected.
    0.7.1May 29, 2009
    - Now use FFTW for calculating discrete Fourier transforms. Grid size can now be arbitrary, though a product of small prime factors is most efficient (2,3,5,7).
    - Small bug removed from "stat" command that in rare conditions may produce wrong results.
    0.7.0Februari 20, 2009
    - Converted code to fortran 90 syntax.
    - Changed all static arrays to dynamically allocated arrays.
    - No hard coded limit to grid size any more.
    - Several codes now have separate version for MPI and non-MPI use.
    - Use MPI_IO routines when using MPI. Previous version was not thread safe.
    - Removed a bug in OPC when GENESIS is called consecutivey more than once.
    - Changed condition for warning if roundtrip magnificaton M is different from 1.
    - Added a new command "tot_cross" that extracts the total power and cross section of the intensity simultaneously from a "field" file and thus reduces io-overhead when large grids are used (large "field" files).
    0.6.11May 22, 2008
    - Removed bug for slit in y-direction. When this component was used, the optical field was also truncated in the x-direction.
    - Added a rectangular aperture (see manual).
    0.6.10May 13, 2008
    - Separated Hermes from Medusa. Now each program has to be called independently.
    - Improved error messages. Now the module or fortran source is displayed with the routine causing the error.
    - Removed a bug from opc_optics.f related to 'opld' masks. When more than one masks is used, they are only applied properly for slice one, while the last mask is used for all the other slices. Currently, 5 different mask are supported. See manually for more details.
    - Made small changes to the manual.
    0.6.9March 13, 2008
    - Removed bug for 'statistics' command. Now energy is returned when nslices > 1 (affects return value for item 'tot').
    - Removed bug for 'opld' command when using MPI. Now the mask is broadcasted correctly to all the processes.
    - Removed bug for 'opld var=mask' command. The bug resulted in using the mesh associated with the field at the beginning of the propagation and thus did not allow for a possible magnification when propagating to the point where the mask is applied. This is now corrected, and the aberrations are now calculated using the grid at the position where the mask is applied.
    0.6.8Januari 31, 2008
    - Changed parsing of input files for Genesis and Medusa. String values are now delimited by single quotes. Fortran 90 codes should use DELIM='apostrophe' in the open statement for files that contain namelists. See appendix D in manual for more detail.
    - Updated manual
    0.6.7October 25, 2007
    - Added individual MPI support for fortran programs
    - Removed bug when OPC is called without gain medium
    - Corrected manual about initialisation of $field from file
    0.6.6August 8, 2007
    - Removed bug for Plot.pm for plottype=total
    - Slightly modified output to screen of opc_optics.f
    - Added program convert_opld to create an ASCII file from a binary opd file
    - Changed units of intensity to MW/cm^2 in Plot.pm
    0.6.5aJuly 30, 2007
    - Removed bug from creating cross-sectional data
    0.6.5Third public release, July 23, 2007
    - Modified syntax for adding mirror aberrations. Both new and old syntax is accepted. See manual for details.
    - Changed interfacing with Medusa
    0.6.4Second public release, May 1, 2007
    - Added opld component to optics configuration
    - Added mask command to generate intensity or phase masks
    - Added statistics command to generate info on optical field
    - Changed print format statements to avoid overflow and underflow of exponents
    - Changed get_param to remove white spaces from strings
    - Removed a bug from Medusa.pm to retrieve the correct number of slices
    0.6.3Limited release for testing with Medusa, March 1, 2007
    - Namelist module changed to make it case insensitive
    - Optimized support for Medusa
    - Added apodization functions to 'hole' and 'diaphragm'
    - Checks format of namelist file when it is copied to a temporary file. More than one variable per line is now accepted.
    - Allows "/" as end of namelist identifier
    0.6.1Limited release for testing with Medusa, January 3, 2007
    - Improved plot.pl script
    - Added headers to ASCII data files for correctly plotting physical quantities and identifying file.
    - Solved bug for writing to binary files. Files are now deleted before they are opened.
    - Patched Medusa module to set $field to the filename of the associated optical field
    0.6.0Limited release for testing with Medusa, December 21, 2006
    - Namelist module changed to output boolean values without quotes
    - The command 'cross' now returns actual intensity instead of a.u.
    - Decoupled ABCD matrices for X and Y directions
    - Added opc_fourier utility (not tested and still contains bugs)
    - Added functionality for running and interfacing with Medusa
    - Various patches for running under MS windows (tested for XP)
    0.5.2First public release, August 24, 2006

    Move to top


    Bug report

    Bug reports can be mailed to the e-mail address given in the README file of the OPC-distribution.


    Known bugs

    • 25-6-2009. There are a few issues with version 0.7.3. First no 64 bit version of the FTTW3-3.dll for running under windows is currently available. Furthermore there is an issue with OpenMPI v1.3.2 and genesis/OPC. See changes for more details.
    • 20-4-2009. Version 0.7.0 was accidentaly shipped with an older version of "interface.cmn". This will lead to a segmentation fault when "dfl_utils" is used. This affects only the single cpu version. Replace the older version with this file and run "make" again in the optics directory.
    • 15-1-2007. Because the way Genesis 1.3 writes data to the binary files (and consequently also OPC), the binary files can become corrupted when the same filename is reused and the number of slices or grid size is changed between runs. Workaround: delete the temporary files "genesis.tmp.out.dfl", "optics.dump*.dfl" and "optics.tmp.dfl" before starting a new run that either has a changed grid size or a different number of slices. This will be done automatically in the upcoming release. Solved with release 0.6 and higher

    Move to top


    References:

    A.E. Siegman, Lasers, University Science Books, Mill Valley, 1986.
    H.A. Haus, Waves and fields in optoelectronics, Prentice-Hall, Inc., Englewood Cliffs, 1984.
    I.V. Volokhine, Design and Numerical Analysis of TUE-FEL II, PhD Thesis, University of Twente, 2003
    Genesis 1.3 http://pbpl.physics.ucla.edu/~reiche/

    Move to top


    Articles

    The following articles have been published regarding this project:

    Time-Dependent, Three-Dimensional Simulation of Free-Electron Laser Oscillators

    P.J.M. van der Slot, H.P. Freund, W. Miner, S.V. Benson, M. Shinn, and K.-J. Boller
    Phys.Rev.Lett.
    102, 244802, 2009

    Modelling Mirror Aberrations in FEL Oscillators Using OPC

    P.J.M. van der Slot, J.G. Karssenberg, K.J. Boller
    Proceedings of the 29th International Free Electron Laser Conference FEL07


    A design for the generation of temporally-coherent radiation pulses in the VUV and beyond by a self-seeding high-gain free electron laser amplifier

    B.W.J. McNeil, N.R. Thompson, D.J. Dunning, J.G. Karssenberg, P.J.M. van der Slot, K.J. Boller
    New Journal of Physics
    vol. 9, p. 010239-1/010239-23, 2007

    FEL-Oscillator simulations with Genesis 1.3

    J.G. Karssenberg, P.J.M. van der Slot, J.W.J. Verschuur, I.V. Volokhine, K.J. Boller
    www.jacow.org
    FEL'06, p 407-410 (2006)

    Modeling paraxial wave propagation in free-electron laser oscillators

    (abstract) (full pdf)
    J. G. Karssenberg, P. J. M. van der Slot, I. V. Volokhine, J. W. J. Verschuur, and K.-J. Boller.
    J. Appl. Phys.
    100, 093106 (2006)

      Top Laser Physics and nonlinear Optics group Department of Science & Technology University of Twente