Review report of FPREPROC module: NTCC modules library reviewer: John Mandrekas, 31-Mar-2000 Summary Recommendation: This utility is in good shape and works as described. I suggest that it is approved by the committee. General Comments: FPREPROC consists of a set of PERL scripts that pre-process FORTRAN (f77 and f90 code) using GNU's gcc compiler. The advantage of FPREPROC over comparable tools such as fpp, is that it should work the same on all systems (vendor-supplied FORTRAN preprocessors can be system and architecture dependent). To use the FPREPROC utilities, it is required that PERL, GMAKE and GCC be available. I tested the utilities on systems running Solaris 7 and HP-UX and they worked without any problems. I also communicated with the authors (Alex Pletzer and Christiane Ludescher ) regarding some problems with the installation script. They modified it, and it now works on all the platforms that I used. ---------------------------------------------------------------------- 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. Clear documentation is included in the README file 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 module. Since this is a perl script, item (c) does not apply here. 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 the utilities should be used are included in the README file. Also, f77 and f90 test routines are included in order to test the utilities. 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 utilities run on multiple brands of UNIX 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 is confirmed. Goal: Minimize external dependencies that cost money (i.e., avoid using expensive proprietary licenses). The only external programs that are required (perl, gmake, gcc) are freely available for almost all UNIX platforms. Goal: Supply warnings in the documentation when the above goal has not been met. OK Goal: Arrays should be dynamically allocated. N/A 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. N/A 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 man page is available however. 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