How to use PGPLOT Graphics with Fortran95 on Windows-XP®
Clive Page, 2009 January 29
0. Introduction
PGPLOT
is a library of Fortran-callable routines for producing graphical output of many
types including line drawings, images and contour maps. It has
particularly good facilities for making plots of scientific data, things like
logarithmic axes and error-bars, and annotations can make use of exponential or
sexagesimal number formats. On suitable devices such an X-windows terminal
it supports user-interaction via a pointing device such as a mouse. PGPLOT
was written by Tim Pearson, a radio-astronomer at CalTech, starting around
1983. The package does not appear to have been updated in the last couple
of years, but it is reliable, well-structured, well-documented, well-tested, and
widely used in the scientific community. Copyright in the source code is
retained by the California Institute of Technology and the free usage licence
covers non-commercial purposes only, but the source code can be downloaded
freely.
Unfortunately PGPLOT is only moderately portable, because it is written in a
mixture of languages and because some of the device drivers are operating
system-specific. Most of PGPLOT is written in Fortran77 (pretty much
conforming to the Standard) but a few low-level routines and some device drivers
are written in C. The installation procedure is also complicated: it
doesn't just involve building with a Make file. It is necessary to select
a set of suitable device drivers, from which the install script then creates a
file called GREXEC.F, which is a device dispatcher written in Fortran77.
It also requires the font information to be converted from a text file to an
unformatted (binary) file suitable for the Fortran compiler in use. PGPLOT
supports a large number of devices, most of them plotters found nowadays only in
museums, but also output formats such as Postscript, GIF, and PNG.
Interactive graphics on Unix-like systems is possible using an X11 driver, but I
could not get this to work under Windows-XP, nor could I find adequate
instructions anywhere for installing PGPLOT under Windows for use with a modern
Fortran compiler.
My solution, outlined below, is to use the GrWin library written by Tsuguhiro
Tamaribuchi of Shizuoka University in Japan. GrWin is however distributed
with pre-built libraries only for the obsolete g77 compiler, and my attempts to
recompile the source code for use by g95 were not successful. However I
found a work-around which is described below.
1. Install the MinGW Package
MinGW is a minimal Gnu package for Microsoft Windows, i.e. it provides a basic
set of GNU (Unix-like) tools services for the Windows environment. The
package can be found
at http://www.mingw.org.
Under Navigation select Downloads, and on the line marked "Automated MinGW
installation" select the download link, then select MinGW-5.1.4.exe (the version
number may well have been updated by the time you read this). You should
select both the basic tools, and the g77 compiler (this is needed for a library
that it includes). I recommend installing the package into the default
location, C:\MINGW
2. Install the g95 Compiler
This may be found at
www.g95.org from which
you should select Downloads and then Binaries. What you need is the item
in the G95 BINARIES section called "Self-extracting Windows x86" - this may be
downloaded by FTP or HTTP - there is not much difference but HTTP may be more
resilient in the face of network problems. After downloading the file run
it to start the installation process. In general it is safe to select the
defaults, but if you try to install this in the default location it chooses for
you, that is C:\FORTRAN, the
installer should notice that you have an existing MinGW structure and give you
the option of installing in
C:\MINGW instead - this is the
location that I recommend.
You should now be able to use g95 to compile Fortran programs whether in the old
fixed-format style (.f files) or new free-format style (.f90 or .f95 files) and
it is probably a good idea to do a couple of tests to make sure the compiler is
installed correctly. These install scripts normally create or modify
various environment variables such as
PATH, LIBRARY_PATH, and
G95_LIBRARY_PATH.
The g95 compiler is run from a command-window, which is well hidden by
Microsoft. If using Windows-XP you can find it it in Start | All Programs
| Accessories. If you are using g95 extensively it is worth dragging the
icon to the desktop - the properties of this icon can then be altered to allow
you to have some specified sub-directory (folder) as the default working
directory when starting up the command window. It is also possible to
change the size of the command window.
3. Installing the GrWin Package including PGPLOT
The main page for the package (in English) is
http://spdg1.sci.shizuoka.ac.jp/grwinlib/english/
- this has a link to the downloads page, from which you need to select
lGrWn0999be-MinGW.exe
(a 1.1 MB download). After downloading this file run it to install the
package. The default location of
C:\GrWin is fine, and you need to
install the GrWin0 library and PGPLOT options, but not the Calcomp library
(unless you really still have software that needs this library). This
installer installs the essential bits of PGPLOT in directory
C:\GRWIN\PGPLOT, including a set of
pgdemoN.f files.
The g77 compiler should have been installed along with the MinGW packages, so
you should be able to use it to compile one of these pgdemoN files. The
one I usually try is pgdemo2.f but all should work. Because some of the
paths and environment variables may not have set up yet, you may need to change
to work in the directory (folder)
C:\MINGW\BIN to get this to
work. The commands needed to copy a file and compile and link it, and then
run it are, for example (shown here in upper-case, but the lower-case equivalent
would also work):
CD
C:\MINGW\BIN
COPY \GRWIN\PGPLOT\PGDEMO2.F
.
PGGWF77
PGDEMO2
PGDEMO2
The program should prompt you for a device (or enter ? to get a list of
them). Choose /GW for a graphics window to appear with various PGPLOT test
patterns - you have to press the Enter key in the command window to move to the
next page of output. The text annotation in these plots may well be
missing because the GRFONT.DAT file
is not in the right place (or possibly not in the right format). The
solution is to define an environment variable pointing to the directory where
they are located. This can be done temporarily (for the duration of a
command window) with a command line this:
SET PGPLOT_DIR
C:\GRWIN\PGPLOT
The way of making a permanent environment variable is also well hidden within
Windows-XP®. You can find it as follows: go to Start then
Control Panel and then scroll down and select System. When the System
window appears select Advanced tab then click the Environment Variables button
which should be found inconspicuously near the bottom left. There are two
sets of environment variables, one for you as the current user, and another for
all users of the PC. It does not matter which you use if you are the only
user of the PC. Click on NEW and then set
PGPLOT_DIR as the Variable name,
and C:\GRWIN\PGPLOT as the Variable
value. Then a set of OKs is needed to update the system and remove all the
system windows. If necessary you can download from here a precompiled
version of
grfont.dat
and
rgb.txt
.
4. Using g95 with GrWin
The batch file used in the test above, PGGWF77.BAT, needs to be modified
somewhat to use g95. Since it only contains one vital line, I suggest you
edit this or create a new one or download the one I made called
PG95.BAT,
using any good text editor (or even a really bad one such as WordPad which is
all that comes with Windows). The command file you need is:
g95 -Bstatic -fno-backslash -O -o %~n1
%1 %2 %3 %4 %5 %6 %7 %8 %9 -Wl,--subsystem,console -lcpgplot -lpgplot -lGrWin
-mwindows -lg2c
Note: this may wrap around on your display, but is just one line.
A few words of explanation about the items in this file:
-
The -Bstatic switch is only
needed to generate a static complete executable file, and may be omitted if
the executable is only going to be used in situ.
-
The -fno-backslash switch is
needed since PGPLOT text annotations may involve using the backslash
character as an escape (e.g. to produce font changes) and it is necessary to
get g95 to treat it as a normal character and not use the default C
convention.
-
The %~n1 argument means that
only the name (not the file extension) of the first argument is used as the
name of the resulting executable - this means you need the file extension on
the command line, but it will take
file.f or
file.f90 as necessary (the
former denotes fixed line layout, the latter denotes free-format line
layout).
-
The other arguments %1, %2 etc allow you to specify up to 9 Fortran source
files in the command.
-
The item at the end, -lg2c,
allows routines in the pgplot library which were compiled using g77 to find
the necessary low-level routines in the library file
libg2c.a.
Thus you use it like this, note that the file extension is needed on the source
files, but that .f, .f90, and .f95 are all
accepted
PG95
PGDEMO2.F
PGDEMO2
5. Adding a GIF Driver
You may notice that the only hard-copy drivers are for Postscript files - this
format, a forerunner of PDF, is widely used in the Unix/GNU/Linux world, but not
common in the Windows environment (although the GSview program handles it fairly
well). File formats which are more common in the Windows world are PNG and
GIF. I have not managed to make the PNG driver available, but it is now
possible to add GIF output format, using a bit of Fortran source-code which you
can download, called
addgif.f90
- simply add this to your program, e.g.
pg95 yourprogram.f90
addgif.f90
This works with gfortran as well (using the pgfortran batch file). The
devices available are /GIF and /VGIF, the latter producing a .gif file in
portrait orientation. The default size of the gif images is 850 x 680
pixels (or 680 x 850 in portrait), but this can be changed by setting values for
environment variables PGPLOT_GIF_WIDTH
and PGPLOT_GIF_HEIGHT.
Note that there must be no spaces either side of the equals sign, e.g. you need
a command like this:
SET
PGPLOT_GIF_WIDTH=300
To restore the defaults use the command with nothing after the equals sign.
The source-code for addgif.f90 is substantially modified from that in the PGPLOT
distribution, as I could not get this to produce satisfactory results with g95
or gfortran (the Fortran77-vintage code necessarily included lots of
non-standard features, no longer necessary with modern Fortran). This file
contains an updated device despatcher and GIF driver making use of the excellent
GIF-writing software of
Jos
Bergervoet, to whom I am very grateful.
6. Using PGPLOT with gfortran
I have also produced a batch file called
PGFORTRAN.BAT
(only slightly different from pg95.bat) which works with the gfortran
Fortran95 compiler.