European Space Agency

European Space Agency

Royal Belgian Institute for Space Aeronomy

Royal Belgian Institute for Space Aeronomy



Current version

The current version of the UNILIB library results from corrections and improvements of Version 2.09, which is documented here, except for:

  • The FORTRAN 77 extensions STRUCTURE and RECORD are replaced by FORTRAN 90 TYPE declarations. The structure of the derived types have been checked against version 2.20.

Version 2.09 has been compiled and delivered for DecAlpha(VMS), PC(MS-Windows), HP9000(HPUX) and SPARC(SunOS) platforms on July 1, 2002.


From v2.24 to v3.00>
  • restructuring of the external magnetic field source code.

  • removal of the Tsyganenko models (see FAQ G-10)

  • IDL uxidl_.for autogenerated

  • Added UNILIB/IRBEM API routines

  • Added IGRF_Coeff_to_BlockData tool to autogenerate the um513.h file.

From v2.23 to 2.24>

addition of model DGRF/IGRF 2020 in um513()

From v2.21 to 2.23>

addition of model DGRF/IGRF 2015 in um513()

From v2.20 to v2.21

addition of model DGRF/IGRF 2010 in um513()

From v2.09 to v2.20
  • Changes between these revisions are not fully documented yet

  • implementation of Tsyganenko 2001, 2004 and Alexeev Paraboloid models. (not documented yet)

  • Problems have been discovered in subroutine um510() when the argument kint is set to 4 (evaluation of DGRF/IGRF by the Kluge algorithm).


From v2.05 to v2.09

Several small anomalies have been fixed.

From v2.03 to v2.05

The subroutines ut550() (coordinate transformation) has been corrected for an oversight affecting GSE coordinate system.

There is no version v2.04

From v2.02 to v2.03
  • The subroutines ul225() and um538() have been introduced to compute the invariant radius and latitude (R,lambda), and the magnetic local time (MLT), respectively.

  • The subroutine uxidl() has been created in order to allow the access to the library from IDL on UNIX platforms as well as MS-Windows computers. This subroutine provides an interface to several UNILIB routines.

  • Oversights have been corrected in a few subroutines relating to the argument lbint of subroutine um510(), the computation of multiple L values with subroutine ul220() and the accuracy of subroutine ul242().

  • The algorithm of subroutine uf423() has been slightly modified such that, when some of the diagnostics of subroutine um530() are generated, the Runge-Kutta step is nevertheless completely applied and new error codes are generated.

From v2.01 to v2.02
  • The external magnetic field model Tsyganenko 89a (argument kext = 4 in subroutine um520()) has been replaced in ext530() by the Tsyganenko 89c model.

  • An oversight, present in version 2.00 and 2.01, has been corrected in subroutine um520(). Due to this oversight, the parameters of external field models (passed in the argument param) were forced to their default values. This erroneous behaviour affects user applications using external magnetic field models except the Olson & Pfitzer quiet [1977] model (kext = 5).

From v2.00 to v2.01
  • The number of field line segments generated by subroutine ud317() when tracing a magnetic drift shell has been increased by about 50%.

  • The argument kflag(39) of common block uc150 is active and initialized to 1 by subroutine ut990(). The argument is used to control, in subroutine ua633(), the dependance of the IRI model either on the Sun spot numbers (default) or on the F10.7 radio flux.

  • The synopsis of the argument zsub of the subroutines ud320() and ud321() has been modified, as well as the synopsis of the subroutine ua636(). The new synopsis is:

      INTEGER*4     kpar1, ktrl, ifail
      REAL*8        rpar2, eng, fct, rmass
      CALL ZSUB (kpar1, rpar2, mpos, mb, fct, ifail)
      CALL UA636 (ktrl, eng, mpos, mb, rmass, ifail)
  • It includes the argument mb corresponding to the magnetic field vector at location mpos. Note that the value of argument mb does not affect the behaviour of subroutine ua636().

  • The entries ud322() and ud323() have been implemented in subroutines ud320() and ud321(), respectively.

  • The subroutine ul242() has been corrected for a lack of accuracy at low I.

  • The diagnostic messages of subroutine ut980() have been simplified. As a consequence, the subroutines ut981() and ut982() have been removed from the library.

  • Errors in the algorithm of subroutine ud327() have been fixed and the synopsis of the subroutine have been changed. The new synopsis is:

C     UD327 synopsis
      TYPE(zgeo) mgp1, mgp2, mgp3, mextr
      REAL*8        fct1, fct2, fct3, est
      INTEGER*4     ifail

      CALL UD327 (mgp1, mgp2, mgp3, fct1, fct2, fct3, mextr, est, ifail)
  • It includes the argument est to return an estimation of the function. The errors affected the behaviour of the subroutine ud315() which returns the mirror point with the lowest altitude on a magnetic drift shell.

  • An error in passing local time to the atmospheric models MSIS and IRI-90 has been fixed in subroutines ua632() and ua633(), respectively.

  • Delivery of a PC/Linux version using the PGI Fortran compiler. Note that the g77 compiler do not support the STRUCTURE and RECORD statements.

From v1.13 to v2.00
  • The algorithm of subroutines uf420(), uf422() and uf427() has been improved for the tracing of field line segment with small value of their integral invariant I.

  • The new subroutines ud317() and uf417() have been created in order to replace the (always existing) subroutines ud310() and uf410(), respectively. This replacement should improve the drift shell tracing, specially in near-equatorial regions. FORTRAN programs using subroutine ud310() can be adapted by the insertion of the following lines:

C     to be included in the declaration part
      TYPE(zlbl) mlab0
      REAL*8        altmin
C     to replace the calling sequence
C        CALL UD310 (fbm0, flm0, falt, knfl, ktyplus, ifail)
      mlab0.lbmp = .TRUE.
      mlab0.llmi = .TRUE.
      mlab0.linv = .FALSE.
      mlab0.fbmp = fbm0
      mlab0.flmi = flm0
      CALL UD317 (mlab0, falt, ktyplus, altmin, ifail)
C     note that knfl is ignored by UD317
C           and altmin is an output argument
  • Coordinate transformation to/from the Geocentric Solar Ecliptic coordinate system has been included in subroutine ut550().

The library documentation has been reviewed: for each argument of every subroutine, a tag have been added to clearly distinguish between input, output and modifiable arguments.

From v1.12 to v1.13
  • The synopsis of subroutine ut986() has been modified. FORTRAN programs using previous versions of the library can be adapted by the insertion of the following lines:

C     to be included in the declaration part
      REAL*8   bsun
C     to replace the old calling sequence
C        CALL UT986 (gm, colat, elong, msun, re)
      CALL UT986(gm, colat, elong, msun, re, bsun)
  • The algorithm of subroutines uf420(), uf422(), uf427() and uf428() have been reviewed and improved. Due to these modifications, the subroutines ul220() and ud310() have a much better behaviour than in version 1.10 or 1.11, especially near the magnetic equator region and at large L.

Note: gm, colat, elong, msun, re the help page T.07 - Which subroutines are mandatory? has been added in the library FAQ.

From v1.11 to v1.12
  • A bug present in the algorithms of the subroutine uf426(), uf427() and uf428() subroutine has been corrected (see bug-03).

  • An error in the FORMAT statements of the subroutine um520() has been corrected.

  • The subroutines um520() and um532(), and the package ext530() have been extended in order to implement the external magnetic field model of Ostapenko & Maltsev [1997].

  • Due to problems with some Fortran compilers (e.g. Microsoft PowerStation), the DATA statements of the block data DGRFBD have been directly included in the subroutine um513(). The common block DGRF has been removed.

From v1.10 to v1.11

Note: The version v1.11 has not been distributed.

  • The sizes of the common blocks uc120, uc130 and uc170 have been increased to nx120 = 500, nx130 = 20000, and nx170 = 500, respectively. This change affects the include file Structures.

  • The parameter nx170 is used instead of the argument nxstp of the common block uc190. This last argument has been removed from the common block.

  • The argument kum533 has been added to the common block uc190 to control the behaviour of subroutine um533(). When the argument kum533 is set to a value less or equal to 0, the subroutine um533() does not check if the current geocentric location is or is not beyond the magnetopause.

  • In subroutine ut990(), the initialisation of common blocks uc190 and uc192 has been modified in order to improve the precision of the library. The old and new values of the corresponding arguments are shown in the table below.


v1.10 and earlier

New value
















From v1.07 to v1.10
  • Print formats in subroutines um520() and ut993() have been modified.

  • Bugs in the coordinate transformation (subroutine ut550()) have been fixed.

Note that the Postscript and the PDF versions of the documentation have been rebuilt.

There are no versions v1.08 and v1.09

From v1.06 to v1.07

Bugs in the implementation of the external magnetic field models have been fixed (bug 02). The Tsyganenko T96 external magnetic field model has been included (ext530()). The synopsis of subroutine um520() has been modified. FORTRAN programs using previous versions of the library can be adapted by the insertion of the following lines:

C     to be included in the declaration part
      REAL*8   param(10)
      DATA     param/ 10*0.0d0/
C     to replace the old calling sequence
C        CALL UM520(kext, amjd, dst, fkp, swd, swv, lbext, kunit, ifail)
      param(1) =  fkp
      param(2) =  dst
      param(4) =  swd
      param(5) =  swv
      CALL UM520(kext, amjd, param, lbext, kunit, ifail)
  • The declaration of the structure zemf has been modified. Consequently the include file Structures is changed and has to be reloaded.

  • A drift shell printing subroutine has been added (ut993()).

  • The DGRF/IGRF block data has been declared as REAL*8 instead of REAL*4 (DGRFBD).

From v1.05 to v1.06
Version v1.05
  • The version 1.05 is the first official version of the library.

Future improvements

  • To be determined

Release Date

The table below shows the release date of the previous versions.


November 1999


March 1999


January 1999


June 1998


February 1998


January 1998


December 1997


November 1997


September 1997


September 1997


August 1997