Portlib Library
***************
NTCC
modules library reviewer: John Mandrekas, 19-May-2000
John Mandrekas, Ph.D.
Senior Research Scientist
Georgia Institute of Technology
Fusion Research Center
ESM Bldg. 0225
Atlanta, GA 30332-0225
(404) 894-7730
john.mandrekas@me.gatech.edu
Summary Recommendation:
I suggest that this library is approved by the committee.
General Comments:
The PortLib library contains a number of useful routines and
functions that
perform certain system tasks. Some of these tasks are very common
(e.g. elapsed
CPU time) and can be found in almost every code. While most Fortran
compilers
provide access to such routines, the interface is not standard
forcing the
developer to re-write part of his/her code and use conditional
compilation every
time the code is ported into a new environment.
The PortLib library provides a standardized interface to these
routines, greatly
simplifying the porting of codes to new platforms.
I successfully built, tested (using the inlcuded porttest program)
and installed
the library on systems running Solaris 7 and HP-UX. I also linked
some of my
codes with the PortLib library and it worked fine. In addition, I
wrote small
programs to test some of the less common routines included in
portlib, and they
worked as expected.
GENERAL STANDARDS
Standard: Provide source code for each physics module or code
Done
Standard: Provide script to compile and link (e.g., Makefile). The
script should
make at least some provision for portability to multiple brands of
UNIX (at
minimum). Provide clear documentation (possible in the README file)
on how to
use the script or Makefile.
Installation script exists and works on various UNIX platforms. Most
common UNIX
platforms (including Linux) are included. Clear documentation
is included in
the README file. The GNU version of make (gmake) should be used.
Standard: Provide a README file giving (a) the name of the module and
its
authors, (b) the location and form of general module documentation,
and (c)
information (or pointer to more detailed documentation) enabling a
user to build
binaries from the source code.
A README file exists with detailed information about the library. In
addition,
the source code of most of the routines includes useful comments.
Standard: Provide documentation about how the module should be used,
for example
whether the module needs to be initialized or used sequentially.
Important
usability issues, such as the existence of state information in
COMMON or other
static memory, which persists between calls, must be described.
Instructions about how this library should be linked are included in
the README
file. Also, a test program (porttest) exists which tests various
routines in the
library.
Standard: Eliminate graphics calls embedded in physics modules.
N/A
Standard: The source code files (e.g. *.f, *.c, or *.cpp files)
should be
submitted rather than requiring extraction from another file.
Done
Standard: Authors may upgrade their modules with approval of the
current
chairperson of the NTCC modules committee. If the upgrade is
extensive, the
chairperson can require that the upgrade be subject to a full
review.
OK
Goal: Multi-platform portability (code should run on different
computers)
The library can be used in multiple brands of UNIX and Linux.
Goal: Provide error checking (but not stops).
Some error checking exists.
Goal: Portability (code should run in different environments, e.g.,
different
operating systems).
Only UNIX (including LINUX) is confirmed.
Goal: Minimize external dependencies that cost money (i.e., avoid
using
expensive proprietary licenses).
Only gmake is required, which is freely available. The FPRERPOC
scripts (which
have already been approved and are included in the NTCC site) are
also required
and are included in the distribution. These scripts
require PERL, which is also
freely available.
Goal: Supply warnings in the documentation when the above goal has
not been met.
OK
Goal: Arrays should be dynamically allocated.
OK in the f90 modules.
Standard: The characteristics of I/O should be clearly documented
(i.e. the
implementation of I/O unit numbers, if any).
N/A
Goal: Avoid using hard-wired I/O unit numbers. Allow informational
output to be
switched on or off. Provide a method for rerouting warning or error
message
output to a user specified file or I/O unit number.
N/A
DOCUMENTATION STANDARDS
Standard: Provide name of contact person for support.
OK
Standard: Provide date of last revision.
Included in the README file
Standard: Provide at least comments describing module or code,
citations to
publications (if any), and range of validity.
Done
Standard: Specify the precision of floating point calculations.
N/A
Standard: Provide the index of input-output variables for each module
(include
types of variable, dimension, units).
N/A
Standard: List dependencies - names of external routines called.
OK where applicable.
Standard: Provide statement of known bugs.
No known bugs are listed
Goal: Index of modules, routines, variables.
N/A
Goal: Publication of code or module in journal (such as Computer
Physics
Communications).
N/A
Goal: Online hyper-text reference documentation.
None available.
Goal: Interactive online help menus.
None available. A brief man page is available. Useful comments exist
in the
source code of most routines and functions.
DATA STANDARDS
Goal: Provide interface routines to data.
N/A
Goal: Use self-describing data files (sunc as NetCDF)
N/A
Goal: Use public domain, portable, available and well-documented data
file
formats.
N/A
Goal: Establish standards for variable names, units, dimensions,
independent
variables and grid descriptions as they appear in the module
interfaces.
N/A