www.archive-org-2013.com » ORG » G » G95 Choose link from "Titles, links and description words view": Or switch to "Titles and links view".

Archived pages: 25 . Archive date: 2013-09.

• Title: The G95 Project

Open archive

• Title: The G95 Project

Open archive

• Title: The G95 Project
Descriptive info: Quick links:.. G95 Manual (pdf).. G95 Manual in Spanish (pdf).. Getting started.. Running G95.. Running g95 programs.. Interfacing to g95 programs.. Getting started:.. G95 can be installed without root permission but currently requires a symbolic link from a specific directory to your install directory.. Unpack the downloaded tarball (e.. g.. g95-x86-linux.. tgz) in a directory of your choice:.. tar -zxvf g95-x86-linux.. For your convenience, you can create another symbolic link from a directory in your $PATH (e.. ~/bin) to the executable.. ln -s$PWD/g95-install/bin/*g95* ~/bin/g95.. You should now be able to run g95 and create executables.. Run a g95-compiled program with the argument --g95 to get a list of environment variables and error code numbers.. Basic options:.. -c.. Compile only, do not run the linker.. -o.. Specify the name of the output file, either an object file or the executable.. Multiple source and object files can be specified at once.. Fortran files are indicated by names ending in.. f ,.. F ,.. for ,.. FOR ,.. f90 ,.. F90 ,.. f95 ,.. F95 ,.. f03 and.. F03.. Multiple source files can be specified.. Object files can be specified as well and will be linked to form an executable.. Files ending in uppercase letters are preprocessed with the C preprocessor by default, files ending in lowercase letters are not preprocessed by default.. Files ending in.. for , and.. FOR are assumed to be fixed form source compatible with old f77 files.. F03 are assumed to be free source form.. Simple examples:.. g95 -c hello.. f90.. Compiles hello.. f90 to an object file named hello.. o.. g95 hello.. f90 and links it to produce an executable a.. out.. g95 -c h1.. f90 h2.. f90 h3.. Compiles multiple source files.. If all goes well, object files h1.. o, h2.. o and h3.. o are created.. g95 -o hello h1.. Compiles multiple source files and links them together to an executable file named 'hello'.. Preprocessor options:.. G95 can handle files that contain C preprocessor constructs.. -cpp.. Force the input files to be run through the C preprocessor.. -no-cpp.. Prevent the input files from being preprocessed.. -D.. name[=value].. Define a preprocessor macro.. -U.. name.. Undefine a preprocessor macro.. -E.. Show preprocessed source only.. -I.. directory.. Append 'directory' to the include and module files search path.. Files are searched for in various directories in this order: Directory of the main source file, the current directory, directories specified by -I, directories specified in the G95_INCLUDE_PATH environment variable and finally the system directories.. -traditional.. Performs traditional C preprocessing (default).. -nontraditional.. Performs modern C preprocessing.. Fortran options:.. -Wall.. Enable most warning messages.. -Werror.. Change warnings into an errors.. -Werror=x.. Change warning x into an error.. -Wextra.. Enable warning not enabled by -Wall.. -Wglobals.. Cross-check procedure use and definition within the same source file.. On by default, use -Wno-globals to disable.. -Wimplicit-none.. Same as -fimplicit-none.. -Wimplicit-interface.. Warn about using an implicit interface.. -Wline-truncation.. Warn about truncated source lines.. -Wmissing-intent.. Warn about missing intents on formal arguments.. -Wobsolescent.. Warn about obsolescent constructs.. -Wno=.. numbers.. Disable a comma separated list of warning numbers.. -Wuninitialized.. Warn about variables used before initialized.. Requires -O2.. -Wunused-vars.. Warn about unused variables.. -Wunused-types.. Warn about unused module types.. Not implied by -Wall.. -Wunset-vars.. Warn about unset variables.. -Wunused-module-vars.. Warn about unused module variables.. Useful for ONLY clauses.. -Wunused-module-procs.. Warn about unused module procedures.. -Wunused-parameter.. Warn about unused parameters.. Not implied by -Wall.. -Wprecision-loss.. Warn about precision loss in implicit type conversions.. -fbackslash.. Interpret backslashes in character constants as escape codes.. Use -fno-backslash to treat backslashes literally.. -fd-comment.. Make D lines executable statements in fixed form.. -fdollar-ok.. Allow dollar signs in entity names.. -fendian=.. Force the endianness of unformatted reads and writes.. The value must be 'big' or 'little'.. Overrides environment variables.. -ffixed-form.. Assume that the source file is fixed form.. -ffixed-line-length-132.. 132 character line width in fixed mode.. -ffixed-line-length-80.. 80 character line width in fixed mode.. -ffree-form.. Assume that the source file is free form.. -ffree-line-length-huge.. Allow very large source lines (10k).. -fimplicit-none.. Specify that no implicit typing is allowed, unless overridden by explicit IMPLICIT statements.. -fintrinsic-extensions.. Enable g95-specific intrinsic functions even in a -std= mode.. -fintrinsic-extensions=proc1,proc2,.. Include selected intrinsic functions even in a -std= mode.. The list is comma-separated and case insensitive.. -fmod=.. Put module files in.. -fmodule-private.. Set default accessibility of module-entities to PRIVATE.. -fmultiple-save.. Allow the SAVE attribute to be specified multiple times.. -fone-error.. Force compilation to stop after the first error.. -ftr15581.. Enable the TR15581 allocatable array extensions even in -std=F or -std=f95 modes.. -M.. Produce a Makefile dependency line on standard output.. -std=F.. Warn about non-F features.. -std=f2003.. Strict fortran 2003 checking.. -std=f95.. Strict fortran 95 checking.. -i4.. Set kinds of integers  ...   spaces and at most one comma.. Default is a single space.. G95_LIST_EXP.. Last power of ten which does not use exponential format for list output.. Default 6.. G95_COMMA.. Use a comma character as the default decimal point for I/O.. G95_EXPAND_UNPRINTABLE.. For formatted output, print otherwise unprintable characters with \-sequences.. Default No.. G95_QUIET.. Suppress bell characters (\a) in formatted output.. G95_SYSTEM_CLOCK.. Number of ticks per second reported by the SYSTEM_CLOCK() intrinsic in microseconds.. Zero disables the clock.. Default 100000.. G95_SEED_RNG.. If true, seeds the random number generator with a new seed when the program is run.. G95_MINUS_ZERO.. If true, prints minus zero without a minus sign in formatted (non-list) output, contrary to the standard.. G95_ABORT.. If true, dumps core on abnormal program end.. Useful for finding the locus of the problem.. G95_MEM_INIT.. How to initialize allocated memory.. Default value is NONE for no initialization (faster), NAN for a Not-a-Number with the mantissa 0x40f95 or a custom hexadecimal value.. G95_MEM_SEGMENTS.. Maximum number of still-allocated memory segments to display when program ends.. 0 means show none, less than 0 means show all.. Default 25.. G95_MEM_MAXALLOC.. If true, shows the maximum number of bytes allocated in user memory during the program run.. G95_MEM_MXFAST.. Maximum request size for handing requests in from fastbins.. Fastbins are quicker but fragment more easily.. Default 64 bytes.. G95_MEM_TRIM_THRESHOLD.. Amount of top-most memory to keep around until it is returned to the operating system.. -1 prevents returning memory to the system.. Useful in long-lived programs.. Default 262144.. G95_MEM_TOP_PAD.. Extra space to allocate when getting memory from the OS.. Can speed up future requests.. Default 0.. G95_SIGHUP.. Whether the program will IGNORE, ABORT or SUSPEND on SIGHUP.. Default ABORT.. G95_SIGINT.. Whether the program will IGNORE or ABORT or SUSPEND on SIGINT.. G95_FPU_ROUND.. Set floating point rounding mode.. Values are NEAREST, UP, DOWN, ZERO.. Default is NEAREST.. G95_FPU_PRECISION.. Precision of intermediate results.. Value can be 24, 53 and 64.. Default 64.. Only available on x86 and IA64 compatibles.. G95_FPU_DENORMAL.. Raise a floating point exception when denormal numbers are encountered.. Default no.. G95_FPU_INVALID.. Raise a floating point exception on an invalid operation.. G95_FPU_ZERODIV.. Raise a floating point exception when dividing by zero.. G95_FPU_OVERFLOW.. Raise a floating point exception on overflow.. G95_FPU_UNDERFLOW.. Raise a floating point exception on underflow.. G95_FPU_INEXACT.. Raise a floating point exception on precision loss.. G95_FPU_EXCEPTIONS.. Whether masked floating point exceptions should be shown after the program ends.. G95_UNIT_x.. Overrides the default unit name for unit x.. G95_UNBUFFERED_x.. If true, unit x is unbuffered.. G95_UNIT_ENDIAN_x.. Sets the endianness of an individual unit.. The value can be big or little.. Takes precedence over G95_ENDIAN.. Runtime error codes.. -2.. End of record.. -1.. End of file.. 0.. Successful return.. Operating system errno codes (1 - 199).. 200.. Conflicting statement options.. 201.. Bad statement option.. 202.. Missing statement option.. 203.. File already opened in another unit.. 204.. Unattached unit.. 205.. FORMAT error.. 206.. Incorrect ACTION specified.. 207.. Read past ENDFILE record.. 208.. Bad value during read.. 209.. Numeric overflow on read.. 210.. Out of memory.. 211.. Array already allocated.. 212.. Deallocated a bad pointer.. 214.. Corrupt record in unformatted sequential-access file.. 215.. Reading more data than the record size (RECL).. 216.. Writing more data than the record size (RECL).. Interfacing with g95 programs.. While g95 produces stand-alone executables, it is occasionally desirable to interface with other programs, usually C.. The first difficulty that multi-language program will face is the names of the public symbols.. G95 follows the f2c convention of adding an underscore to public names, or two underscores if the name contains an underscore.. The -fno-second-underscore and -fno-underscoring can be useful to force g95 to produce names compatible with your C compiler.. Use the 'nm' program to look at the.. o files being produce by both compilers.. G95 folds public names to lowercase as well, unless -fupper-case is given, in which case everything will be upper case.. Module names are represented as.. module-name.. _MP_.. After linking, there are two main cases: Fortran calling C subroutines and C calling fortran subroutines.. For C calling fortran subroutines, the fortran subroutines will often call fortran library subroutines that expect the heap to be initialized in some way.. To force a manual initialization from C, call g95_runtime_start() to initialize the fortran library and g95_runtime_stop() when done.. The prototype of the g95_runtime_start() is:.. void g95_runtime_start(int argc, char *argv[]);.. The library has to be able to process command-line options.. If this is awkward to do and your program doesn't have a need for command-line arguments, pass argc=0 and argv=NULL.. On OSX/Tiger, include '-lSystemStubs' when using g95 to run the linker and linking objects files compiled by gcc.. Information on OpenGL binding can be found at Nick Yasko's.. G95/OpenGL page..

Open archive

• Title: Installing g95 in Windows FAQ
Descriptive info: Installing G95 under Windows FAQ.. Most problems encountered by new users when installing g95 in Windows are solved by setting the.. PATH.. and the correct environment variable for your package, either.. LIBRARY_PATH.. or.. G95_LIBRARY_PATH.. How do I use the Control Panel to edit PATH and add environment variables?.. Will g95 conflict with gfortran?.. unrecognized option '--sysroot='.. cannot exec 'f951':.. cannot exec 'as':.. Is the g95 directory too deep in PATH?.. _spawnvp: Invalid argument.. ld: crt2.. o: No such file:.. Why does g95 need environment variables?.. Where is g95?.. Did you run the installer?.. Q.. 1.. A.. See the discussion at:.. http://vlaurie.. com/computers2/Articles/environment.. htm.. 2.. Will g95 conflict with gfortran?.. Installing the g95-MinGW.. exe package may cause problems for gfortran as both compilers recognize the LIBRARY_PATH environment variable.. Use the g95-MinGW-41.. exe.. package instead.. It uses G95_LIBRARY_PATH to find its library files instead of.. This does not interfere with either gfortran or gcc.. 3.. I installed g95-MinGW-41.. exe but when I compiled my code the process stopped.. with the message:.. ld: unrecognized option '--sysroot='.. Check if g95 is calling the correct version of ld.. exe by adding -v when compiling.. Try adding the g95 directory (i.. e.. , c:\g95\bin; c:\g95\lib\gcc-lib\i686-pc-mingw32\4.. 2;) at the beginning of your PATH environment variable.. If that fails, delete g95 entirely, and reinstall.. Answer "yes" to all the dialogues during the install.. 4.. I executed the g95 installer on my XP Home system.. Everything installed fine but the compiler complained with the message:.. g95: installation problem, cannot exec 'f951': Invalid argument.. If you downloaded the g95-MinGW.. exe installer add LIBRARY_PATH to your user set of environment variables and set it to point to \g95\lib;\g95\lib\gcc-lib\i686-mingw32\4.. 4\.. If you downloaded the g95-MinGW-41.. exe installer add G95_LIBRARY_PATH to your user set of environment variables and set it to point to \g95\lib;\g95\lib\gcc-lib\i686-mingw32\4.. 2\.. If it still fails, try copying f951.. exe from its \g95\lib\gcc-lib\i686-mingw32\4.. x.. x\ location to \g95\bin.. 5.. I installed g95-.. MinGW.. -41.. on XP Pro.. The environment variables are correctly set.. I got the error:.. g95: installation problem, cannot exec 'as': Invalid argument.. Try copying \g95\bin\as.. exe and \g95\bin\ld.. exe to \g95\lib\gcc-lib\i686-mingw32\4.. 2.. 1\.. 6.. I can't get g95 to work.. My  ...   f90'.. I see the error message shown below.. Where is my error?.. o: No such file: No such file or directory.. exe package, add LIBRARY_PATH to your user set of environment variables and set it to point to: \g95\lib;\g95\lib\gcc-lib\i686-mingw32\4.. 4.. If the problem persists, copy copy the *.. o and *.. a files in g95\lib\ to:.. \g95\lib\gcc-lib\i686-pc-mingw32\4.. exe package, add G95_LIBRARY_PATH to your user set of environment variables and set it to point to: \g95\lib;\g95\lib\gcc-lib\i686-mingw32\4.. If the problem persists, copy the *.. 9.. Why does the g95 Windows build require environment variables to be set?.. The g95 library and several supporting programs are separate files from the g95 compiler, some of which may be located in different directories.. The environment variable LIBRARY_PATH or G95_LIBRARY_PATH helps the compiler and linker find those files.. 10.. I tried installing g95, and now I can't see it.. Where is it?.. Are you sure you downloaded the correct file? Try downloading from:.. You can "save" the file on your computer somewhere, then find it in Windows Explorer, click on it to run the installer.. It will give you several options in pop-up windows, including one to select an install directory.. Try selecting c:\g95 as the install directory.. There are three directories created in c: \g95, bin, doc, and lib.. You will find some additional information in the doc directory.. Please consult the README.. txt file.. If you are looking for an icon on your desktop, there won't be one.. After running the installer, you have to open a CMD window to use g95.. You can do this by clicking on Start, Run.. Or, in Vista you can right-click on any folder while holding down the shift key, and select "Open Command Window Here" in the menu.. 11.. I clicked the link.. , and I saved the program in a folder under C:/.. Then I clicked "run" at the start menu.. I typed "g95.. " Then it shows me the message:.. 'g95' is not recognized as an internal or external command, operable program or batch file'.. The installer you downloaded has to be executed.. It runs a script to install g95 in the directory you choose.. Then you can use g95..

Open archive

• Title: The G95 Project
Descriptive info: Quick Links:.. Setting up emacs with g95.. How to link shared programs with R.. How to use mkmf with with g95.. Setting up Photran with g95.. Configuring LAPACK with g95.. Configuring ARPACK with g95.. Configuring MPICH2-1.. 1 with g95.. Configuring BLACS with g95.. Configuring SCALAPACK with g95.. Configuring SUPERLU-3.. 0 with g95.. Configuring UMFPACK with g95.. Configuring MUMPS-4.. 3.. 2 with g95.. Configuring AZTEC-2.. How to link g95 programs with MATLAB.. How to link g95 programs with MATLAB (windows).. How to build DLL's with g95.. How to use g95 with IRIX modules.. How to use g95 with SciTE.. How to interface with Python programs.. How to interface with SCILAB.. How to use scons with g95.. Configuring MATRAN with g95.. How to use PGPLOT with g95.. How to configure emacs for.. g95 error messages (Helge Avlesen).. Add the following lines to your.. emacs file:.. ;; add g95 to compilation mode.. (eval-after-load compile.. '(setq compilation-error-regexp-alist.. (cons '( ^In file \$$.. +\$$:\$$[0-9]+\$$ 1 2).. compilation-error-regexp-alist))).. This will allow emacs to find the next error message in compile mode.. How to link shared g95.. programs with R.. Make libf95.. so.. After installing g95 find the file libf95.. a.. Copy this to an empty subdirectory and extract all of the objects: ar -x libg95.. Then create a shared library: gcc -shared -o libg95.. so *.. o.. It is useful to put the file libg95.. so somewhere where users can make use of it (i.. /usr/local/lib).. Compile your source files with g95 as follows: g95 -c -fPIC mylib.. f and make the objects into your own shared library: gcc -shared -o mylib.. so mylib.. o That's it! Use the library in R as follows:.. dyn.. load( /path-to/libg95.. so ,local=FALSE).. load( /path-to/mylib.. so ).. Example: ( square a vector ) myib.. f:.. subroutine fsquv(n, x).. integer n.. double precision x(n).. integer i.. do 100 i = 1, n.. x(i) = x(i) ** 2.. 100 continue.. End.. After the steps above in R:.. so ).. then define a wrapper function in R to make it easier.. squarevector - function(x) {.. if (!is.. numeric(x)) stop( argument x must be numeric ).. out -.. Fortran( fsquv ,n=as.. integer(length(x)),.. x=as.. double(x)).. return(out$x).. }.. Then use your wrapper function:.. squarevector(1:5).. [1] 1 4 9 16 25.. How to use mkmf with g95.. Last update: 7 March 2007.. This Howto includes contributions from Hani Andreas Ibrahim and Mohammad Rahmani.. Further suggestions are welcome!.. mkmf.. is a tool written in perl5 that will construct a Makefile.. It is available from.. http://www.. gfdl.. noaa.. gov/fms/pubrel/k/am2/bin/mkmf.. html.. mkmf understands dependencies in f90 (modules and use), the fortran include statement, and the cpp #include statement in any type of source.. Detailed information on using mkmf is provided at the link provided above.. Perl 5 must be installed in order to use mkmf.. If using Windows, Perl is included in the msysDTK package.. Download and install both msys and msysDTK from.. www.. mingw.. Include the mingw\bin and Msys\1.. 0\bin directories in your PATH.. Download.. the mkmf script and save it somewhere in your system (e.. c:\mingw\bin).. mkmf currently only distinguishes.. f,.. F,.. f90, and.. F90 source filename extensions.. If you wish to add support other Fortran extensions, change lines 59 to 82 in the mkmf perl script as follows, otherwise skip to step 3.. #some constants.. my$endline = $/;.. my @src_suffixes = ( q/\.. F/, q/\.. FOR/, q/\.. F90/, q/\.. F95/,q/\.. F03/, q/\.. c/, q/\.. f/, q/\.. for/,q/\.. f90/, q/\.. f95/, q/\.. f03/ );.. my @inc_suffixes = ( q/\.. H/, q/\.. fh/, q/\.. h/, q/\.. inc/ );.. # push @inc_suffixes, @src_suffixes; # sourcefiles can be includefiles too: DISALLOW, 6 May 2004.. my %compile_cmd = ( # command to create.. o file from a source file suffix.. q/.. F/ = q/$(FC) $(CPPDEFS)$(CPPFLAGS) $(FFLAGS) -c/,.. FOR/ = q/$(FC) $(CPPDEFS)$(CPPFLAGS) $(FFLAGS) -c/,.. F90/ = q/$(FC) $(CPPDEFS)$(CPPFLAGS) $(FFLAGS) -c/,.. F95/ = q/$(FC) $(CPPDEFS)$(CPPFLAGS) $(FFLAGS) -c/,.. F03/ = q/$(FC) $(CPPDEFS)$(CPPFLAGS) $(FFLAGS) -c/,.. c/ = q/$(CC) $(CPPDEFS)$(CPPFLAGS) $(CFLAGS) -c/,.. f/ = q/$(FC) $(FFLAGS) -c/,.. for/ = q/$(FC) $(FFLAGS) -c/,.. f90/ = q/$(FC) $(FFLAGS) -c/,.. f95/ = q/$(FC) $(FFLAGS) -c/,.. f03/ = q/$(FC) $(FFLAGS) -c/ );.. my %delim_match = ( q/'/ = q/'/, # hash to find include file delimiter pair.. q/ / = q/ /,.. q/ / = q/ / );.. #formatting command for MAKEFILE, keeps very long lines to 256 characters.. Create a template file for your compiler to adapt to user environment.. Below is an example template file for g95:.. FC = g95.. LD = g95.. FFLAGS = -I c:/mingw/include.. LDFLAGS =$(LIBS).. # add your libraries after LIBS= , e.. -lblas.. LIBS = c:/mingw/lib.. Give a name to the above template file (e.. g95_args) and save it as c:\mingw\bin\g95_args.. The syntax for using mkmf is:.. mkmf [-a abspath] [-c cppdefs] [-d] [-f] [-m makefile] [-p program] [-t template] [-v] [-x] [args].. -a abspath.. attaches the abspath at the front of all relative paths to source files;.. cppdefs.. is a list of cpp #defines to be passed to the source files: affected object files will be selectively removed if there has been a change in this state;.. -d.. is a debug flag to mkmf (much more verbose than -v, but probably of use only if you are modifying mkmf itself);.. -f.. is a formatting flag to restrict lines in the makefile to 256 characters.. This allows editing makefiles using vi.. Lines longer than that will use continuation lines as needed;.. makefile.. is the name of the makefile written (default Makefile);.. template.. is a file containing a list of make macros or commands written to the beginning of the makefile;.. program.. is the name of the final target (default a.. out, change to a.. exe for Windows systems);.. -v.. is a verbosity flag to mkmf;.. -x.. executes the makefile immediately;.. args.. are a list of directories and files to be searched for targets and dependencies.. Usage.. To use mkmf with the g95 compiler to create a Makefile, go to the directory containing your source files and issue the following command:.. Perl c:\mingw\bin\mkmf -t c:\mingw\bin\g95_args.. To create a makefile and execute it immediately with an optional target name, do as follows:.. mkmf -t c:\mingw\bin\g95_args -p myproj.. exe -x.. Here myproj.. exe is the name of the final target (output).. To make using mkmf much easier, create a script file (e.. mkmf-g95.. bat on Windows) and put it in c:\mingw\bin.. (Make sure you have this in your PATH.. ) The script file should contain the following (modify to fit your setup):.. Echo off.. REM This file can be called from anywhere to create a Makefile.. REM based on the Fortran source files in that location.. REM a.. exe is the name of final output.. Change it to fit your needs.. REM If ignored, the mkmf script will use a.. out by default.. REM g95_args is the name of a template file used to set user.. REM environment variables.. Change it as you wish.. REM.. REM Perl c:\mingw\bin\mkmf -t c:\mingw\bin\g95_args -p a.. If (%1)==() (.. Perl c:\mingw\bin\mkmf -t c:\mingw\bin\g95_args -p a.. ) Else (.. Perl c:\mingw\bin\mkmf -t c:\mingw\bin\g95_args -p %1.. ).. REM The above allows the target name to be passed as an argument.. In the above code, if you pass a target name as an argument to mkmf-g95.. bat, it will generate a Makefile with the target name as its output.. Otherwise the script will produce a Makefile with a.. exe as the output target.. Change a.. out to a.. exe [Only on Windows machines].. The mkmf script creates Makefiles with a.. out as the target, which is not suitable for Windows so it is necessary to modify the mkmf to produce a.. exe as the default output instead of a.. out.. To do this, open the mkmf script file in a text editor and replace all a.. out with a.. How to use Photran with G95.. This install guide has been tested successfully with Photran 3.. 1 Beta 2 for Windows.. This Howto includes contributions from Hani Andreas Ibrahim (25/01/2007) and Mohammad Rahmani (9/02/2007).. The g95 compiler, and Perl should be in your PATH.. Further suggestions for improvements and/or corrections are welcome!.. Now you can develop your Fortran programs with g95 using.. Photran.. , a full featured Fortran IDE based on Eclipse.. It is available for both Windows and Linux systems.. This is a summary of the steps required to setup Photran and g95 on a Windows XP system.. If you use MinGW it is useful to download and install msys and msysDTK from.. The Msys bin directory has to be in your path.. Generating a g95 Makefile automatically.. (Skip this section if you don’t want to use mkmf for auto creation of Makefile).. Set up mkmf by carefully following all the directions provided in.. If your paths are different from those used in the install instructions make appropriate adjustments to the paths used in the following steps.. In order to use mkmf in Photran, Perl 5 must be installed.. If using Windows, Perl is included in the msysDTK package from.. Open Photran and click the menu Run - External tools - External tools.. On the Main Tab fill out the form as follows:.. Name: g95 make Makefile.. Location: c:/mingw/bin/mkmf-g95.. bat.. Working directory: ${container_loc}.. Arguments:${project_name}.. Note: The file c:\mingw\bin\mkmf-g95.. bat is the batch file for running the mkmf Perl script described in Section 6 of.. Refresh Tab.. For refresh tab fill the form as follows:.. [x] Refresh resources upon completion.. (x) The folder containing the selected resources.. [x] Recursively include sub-folders.. Common Tab.. (x) Local file.. Display in favorite menu.. [x] External Tools.. [x] Launch in background.. Click Apply.. On the Photran toolbar click the menu  ...   Fortran compiler is specified in the mexopts.. sh file, which is stored in [MATLAB root]/bin, or in a local copy kept somewhere in ~/.. matlab.. To use G95, open mexopts.. sh and go the section relevant for your OS.. Change the variable 'FC' to specify the full path to G95.. Also, it is necessary to link to libf95.. a or MATLAB will crash when attempting to use certain intrinsics, so add that to the 'FLIBS' variable.. The other variables should be set to whatever additional flags and optimization options you want.. As an example, on Mac OS X and MATLAB 7, the relevant section of mexopts.. sh looks like:.. FC='/usr/local/g95-install/bin/powerpc-apple-darwin6.. 8-g95'.. FFLAGS='-ffree-form'.. FLIBS='-L/usr/local/g95-install/lib/gcc-lib/powerpc-apple-darwin6.. 8/4.. 0/ -lf95'.. FOPTIMFLAGS='-O'.. FDEBUGFLAGS='-g'.. Notes.. The simplest way to pass data to and from MATLAB is through the %VAL() construct or the F2003 VALUE attribute.. I have only tested G95 with MATLAB 7 and Mac OS X, so there are probably things I've missed.. Information on using MATLAB and other Fortran90 compilers is on the web and may be helpful.. Use -fexceptions in FFLAGS if fortran code uses extern C c++ function that throw c++ exceptions so MATLAB won't crash.. (Dimitry Markman).. Using g95 and MATLAB under.. windows (Ivo Houtzager).. You need the following programs:.. MinGW.. G95-MinGW.. Gnumex (.. gnumex.. sourceforge.. net.. ).. Install G95-MinGW in the root directory of MinGW (for example C:\MinGW) Install Gnumex (for example in C:\Gnumex) Copy the.. patch.. to C:\Gnumex and patch the files gnumex.. m and linkmex.. pl:.. patch -l gnumex.. patch.. In Matlab add the path C:\Gnumex.. path(path,'C:\Gnumex').. Call gnumex in Matlab.. Select Mingw for linking and G95 in the language for compilation? drop box.. If C:\MinGW is not your MinGW root directory adjust the Mingw root path.. See for more information gnumex.. net Comments on Gnumex and MinGW: The versions of gcc-3.. 4 and gcc-3.. 3 and lower works fine, but I get for the versions 3.. 0, 3.. 1 and 3.. 2 and the compiler setting pentium4 bad results.. The cause is the compiler optimization -mfpmath=sse.. I added the setting pentium4 -f which has this optimization removed.. How to use IRIX modules with g95.. (Charles Castevens).. As root, create a module file called 'g95' for the users to load:.. touch /opt/modulefiles/g95.. chmod a+r /opt/modulefiles/g95.. vi /opt/modulefiles/g95.. #%Module#################################################.. # http://ftp.. org/g95-mips-irix.. tgz default modulefile.. # IRIX version Fri Jul 21 21:14:30 EDT 2006.. #.. proc ModulesHelp { } {.. puts stderr The g95 modulefile defines the default path needed to use.. #g95.. puts stderr Type \ module load g95\ to load g95 and then.. puts stderr \ module list\ to verify that the g95 modulefile is.. #loaded.. set _module_name [module-info name].. set is_module_rm [module-info mode remove].. set G95_CURPATH /opt/g95/bin.. prepend-path PATH $G95_CURPATH.. Copy http://ftp.. tgz to /usr/tmp then.. cd /usr/tmp.. mkdir -p /opt/g95/bin.. mkdir -p /opt/g95/lib/gcc-lib/mips-sgi-irix6.. 5/4.. gunzip -c g95-mips-irix.. tgz | tar -xvf -.. cd g95-install/bin.. mv mips-sgi-irix6.. 5-g95 /opt/g95/bin.. /lib/gcc-lib/mips-sgi-irix6.. mv * /opt/g95/lib/gcc-lib/mips-sgi-irix6.. cd /opt/g95.. chown -R nobody.. nobody.. *.. chmod a+rx.. bin.. cd bin.. ln -s mips-sgi-irix6.. 5-g95 g95.. /lib/gcc-lib.. cd mips-sgi-irix6.. chmod a-x *.. a *.. o *.. From a user prompt once they do the usual.. source /opt/modules/modules/init/csh.. module load modules.. at a prompt or in their.. cshrc or.. tcshrc; see.. grelnotes modules.. and click on Next Chapter for more info.. Once you have modules working on the machine, the users should be able to go straight to.. module load g95.. once they log in and then g95 will be ready:.. g95 -O3 -s program.. f -o program.. /program.. How to use g95 with SciTE.. (Doug Cox).. The free SciTE editor works with many programming languages, including Fortran.. SciTE is available for both Linux and Windows systems.. The Windows version is configured for the Lahey compiler by default.. On systems with a working version of make, which is included in Msys/MinGW and in Cygwin on Windows, SciTE can be used for editing fortran files, compiling with g95, and testing executables.. Here is how to set up SciTE for use with g95:.. Download SciTE from:.. http://scintilla.. net/SciTEDownload.. Install by unpacking in some convenient directory.. Edit the fortran.. properties file listed under the Options menu.. Change the compiler names to:.. fc77=g95.. fc90=g95.. Change the lines in the fortran.. properties file containing the commands for compiling to something like the following:.. command.. compile.. *.. f=$(fc77) -I.. \ -L.. \ $(1)$(2) -c $(FileNameExt)$(3) $(4) -info.. for=$(fc77) -I.. f90=$(fc90) -I.. f95=$(fc90) -I.. For Windows systems with MinGW and Msys, add the c:\Msys\1.. 0\bin directory (or the equivalent on your system) to the PATH so that SciTE can find the Msys make program, and if necessary, add the c:\mingw\bin directory to the PATH so that SciTE can find g95.. SciTE allows you to compile and execute your code from the Tools menu.. There are commands for compiling a file, building a project using make, and running the executable in a SciTE shell.. Using g95's -M option.. When compiling with g95, the -M option can be used for writing Makefiles.. The use of this option causes g95 to write out dependencies in the form required by a Makefile.. The output can be used in the Makefile needed by the make program.. This feature makes writing makefiles for g95 easier.. Put the Makefile in the same directory as your source files.. Simply click 'Build' under the 'Tools' menu in SciTE to run make.. If the build is successful, clicking 'Go' runs the compiled program.. How to interface with.. Python programs (Bill McLean).. Suppose we want to call a subroutine foo with the interface:.. subroutine foo(n, a).. integer, intent(in) :: n.. real, intent(out) :: a(n,n).. end subroutine foo.. First method: using ctypes:.. Install.. numpy.. ( =version 1.. If your.. Python.. version is 2.. 5, then either install ctypes or install the current python version (which include ctypes in the standard library).. Note that make altinstall allows you to use a new python version alongside an existing, older version to avoid possible problems with python-dependent packages.. Compile foo.. f95 into a shared library:.. g95 -shared -fPIC foo.. f95 -o foo.. and check the name of the routine's symbol.. nm foo.. so | grep foo.. This name will be foo_ if foo is an external procedure, but will be bar_MP_foo_ is foo in contained in a module bar.. You can use the BIND(C) feature to control the symbol's actual name.. Write a python wrapper for foo as follows:.. from numpy import *.. from ctypes import c_int, POINTER, byref.. foolib = ctypeslib.. load_library('foo', '.. ').. _foo = foolib.. foo_ # or _foo = foolib.. bar_MP_foo_.. _foo.. restype = None.. def foo(n):.. a = zeros((n,n,), dtype=float32, order='FORTRAN').. arg = ctypeslib.. ndpointer(dtype=float32, shape=(n,n,), flags='FORTRAN').. argtypes = [POINTER(c_int), arg].. cn = c_int(n).. _foo(byref(cn), a).. return a.. a = foo(4).. Second method: using f2py.. Install numpy (version =1.. 0), which includes f2py, a fortran-to-python interface generator.. Do.. f2py -c --help-fcompiler.. to check that f2py recognizes g95.. Use f2py to generate a signature file foo.. pyf:.. f2py foo.. f95 -m foo -h foo.. pyf.. In more complicated examples, you might have to manually adjust foo.. pyf.. Use f2py again to automagically create a python extension module foo.. so:.. f2py -c --fcompiler=g95 foo.. pyf foo.. f95.. Here, if you omit the --fcompiler flag then f2py uses the default compiler as determined by the _default_compilers variable in the file numpy/distutils/fcompiler/__init__.. py (currently g77).. Calling foo from python is now easy.. import foo.. print foo.. foo.. __doc__ # shows python interface generated by f2py.. a = foo.. foo(4).. Using Scons with g95 (Doug Cox).. The Scons build system can be obtained from.. scons.. Scons signifies 'Software Construction'.. It is an alternative to 'make'.. Scons requires.. to be installed.. When invoked without any arguments Scons looks for a file named 'SConstruct', which is also a Python script.. By default, the Windows version of Scons is set up to work with the Microsoft C compiler, but it can be used to build many other kinds of projects.. Below is an example of an SConstruct file that works with the MinGW version of g95 in an Msys shell.. In this example, the files foo1.. f90.. foo4.. f90 are module files, and foo.. f90 is a main program which uses the modules.. The file foo4.. f90 contains a module which is required by foo2.. f90, so it is listed before foo2.. Scons detects which source files have been modified since a previous build, and only rebuilds the ones that are needed.. # Example build script for Scons in Msys/MinGW.. # In a Msys shell, cd to the source directory.. # Save this script with the filename SConstruct.. # To build, type 'c:/python25/scripts/scons'.. import os.. env = Environment( platform = 'win32',.. ENV = os.. environ,.. tools = ['mingw'],.. FORTRAN = 'g95',.. FORTRANFLAGS = '-O3',.. CC = 'gcc',.. LINK = 'g95' ).. env.. Program( target = 'foo.. exe',.. source = [.. 'foo1.. f90', # module source file.. 'foo4.. f90', # module source file used in foo2.. 'foo2.. 'foo3.. 'foo.. f90' # main program.. ]).. # For information see:.. # http://www.. org/doc/HTML/scons-man.. Grab matran source from.. cs.. umd.. edu/~stewart/matran/Matran.. tar.. tar -xvf Matran.. tar wherever you see fit.. cd Matran/Matran.. edit Makefile and change the following lines.. FC = f95 $(FC) -c -fpp -D$(PREC) $.. to.. FC = g95$(FC) -c -cpp -D$(PREC)$.. Be sure to have the libs blas.. a and lapack.. a in some directory that g95 can find.. If the names of libs are different, be sure to change them in the Makefile.. Issue make all and then make arch.. Copy (and rename) Matran.. a to the desired location.. Aleksander Schwarzenberg-Czerny contributed a set of configuration.. files.. for PGPLOT.. Clive Page has.. instructions.. for windows..

Open archive

• Title: The G95 Project
Descriptive info: Compiling G95.. General.. Platform Notes.. OSX.. Support for the -mno-cygwin option.. Build a dll version of g95.. G95 uses the 4.. x release version of.. GCC.. The 4.. 1, 4.. 2 and 4.. 3 stable versions are known to work, other versions might not.. This version is known to work, but other versions might not.. Download gcc from.. ftp://gcc.. gnu.. org/pub/gcc/releases/gcc-4.. 3/gcc-core-4.. gz.. This version of GCC stores object files in a directory distinct from the source directories.. G95 expects to find gcc object files and libraries in a directory named 'g95' under the main 'gcc-4.. 3' directory.. Run the commands:.. cd gcc-4.. mkdir g95.. cd g95.. The gcc 'configure' script must be run in the directory that you expect to receive the object files.. Configure gcc with.. /configure --enable-languages=c.. Run 'make' to build gcc.. A full build isn't necessary.. If you end up with libbackend.. a, and libgcc.. a, you've got enough to build g95.. If libgcc.. a isn't present, try 'make libgcc.. a'.. Download the.. g95 source.. and unpack it in some convenient directory.. Change to the main g95 directory and configure with.. /configure --prefix= installation directory \.. --with-gcc-dir= path of your GCC directory.. Build g95 with 'make' or 'make install' to install in the installation directory.. Unpack the libf95.. a-0.. 91.. tgz, configure and build it to get libf95.. Make sure --prefix is the same as with g95.. Do 'make install' to build and install the library.. The exact name of the executable depends on the platform.. Create a convenient symbolic link to this.. You should now be able to compile fortran 95 programs with g95.. Configure the compiler and library with --enable-F=yes to compile g95 with the F restrictions.. The build process is still pretty crude though I am sure it will be smoothed over as time goes by.. Platform notes.. Compile g95 with CFLAGS=-no-cpp-precomp.. This prevents the special preprocessor from kicking in and messing things up.. AIX.. It may be necessary to configure with CFLAGS=-liconv.. Building with MinGW requires that the Development and MinGW packages are installed.. Also requires gcc-core, gettext, and make.. To pull source code from a repository also requires cvs.. Set-up the build tools:.. MinGW-5.. to directory.. C:\MinGW.. MSYS-1.. 10.. (configure MinGW to work with MSys) to directory.. C:\msys\1.. msysDTK-1.. bison.. flex.. C:\GnuWin32.. MSVCP60.. DLL..  ...   session run the following commands:.. 3/configure --enable-languages=c \.. --disable-nls.. If all goes well this will result in Cygwin builds of libbackend.. a and libgcc.. a needed for compiling g95.. Download the g95 source and unpack it within C:\cygwin\src\G95.. Continue with the g95 compilation instructions.. Support of MinGW targets under Cygwin.. Complete successfully the Cygwin build of G95.. Configure the G95 library to support MinGW within Cygwin.. Start an Cygwin session and run the following command:.. 91/libf95.. 3 --with-mingw.. Build the G95 library to support MinGW within Cygwin.. Within the Cygwin session run the following command:.. rm *.. This should result in a re-built libf95.. a whose members have been compiled under Cygwin with the -mno-cygwin option enabled.. Enable the MinGW compliant library for Cygwin G95:.. mkdir /usr/local/lib/gcc-lib/i686-pc-mingw32/4.. 3/.. ranlib libf95.. cp libf95.. a /usr/local/lib/gcc-lib/i686-pc-mingw32/4.. cd /usr/local/lib/gcc-lib/i686-pc-cygwin/4.. g95 -dumpspecs specs.. sed -e '/*startfile:/ {.. s/%{mno-cygwin:dllcrt2%O%s/%{mno-cygwin:\/usr\/lib\/mingw\/dllcrt2%O%s -L\/usr\/local\/lib\/gcc-lib\/i686-pc-mingw32\/4.. 3 -L\/usr\/lib\/mingw/.. s/%{mno-cygwin:crt2%O%s/%{mno-cygwin:\/usr\/lib\/mingw\/crt2%O%s -L\/usr\/local\/lib\/gcc-lib\/i686-pc-mingw32\/4.. }' specs.. 0 specs.. rm specs.. The -mno-cygwin should now be supported by Cygwin g95.. Following example Cygwin session output to confirm could be:.. dmiles@STACK02 /tmp.. $uname.. CYGWIN_NT-5..$ cat hello.. f.. program hello.. print *,'hello'.. end.. $g95 -o hello_cygwin.. exe hello.. /hello_cygwin.. hello..$ objdump -x hello_cygwin.. exe | grep DLL Name.. DLL Name: cygwin1.. dll.. DLL Name: KERNEL32.. $g95 -mno-cygwin -o hello_mingw.. /hello_mingw..$ objdump -x hello_mingw.. DLL Name: msvcrt.. dl.. A script to download and unpack the g95 source, and build a version of g95 that uses dlls, has been contributed by Dave Miles.. Your Cygwin environment should be set up to build g95 as described above.. Save the following script in a file named bld-g95.. sh.. #!/bin/sh.. {.. cd /src/G95.. rm -fR g95-0.. 91.. wget -O - http://www.. org/g95_source.. cd g95-0.. tar -zxf libf95.. gz \.. cd libf95.. 91 \.. 3 \.. if [ $? != 0 ].. then.. fi.. make install.. mv main.. o main.. gcc -mdll -o g95.. dll \.. -Wl,--output-def \.. -Wl,g95.. def \.. -Wl,--out-implib \.. -Wl,libf95.. -Wl,--export-all-symbols *.. o -lws2_32.. if [ -f libf95.. a ].. a /usr/local/lib/gcc-lib/i686-pc-cygwin/4.. if [ -f g95.. dll ].. cp g95.. dll /bin.. cp main.. g95 /lib/g95main.. } 2 1 | tee -a bld-g95.. log.. In a Cygwin bash shell, run the following commands:.. chmod +x bld-g95.. sh.. /bld-g95.. When compiling, link to /lib/g95main.. o or compile with -shared.. Original link path: /source.shtml Open archive • Title: The G95 Project Descriptive info: Cool things you can do with G95.. G95 is much more than just a compiler.. It is a system for doing computations.. There are several very cool things that you can do with g95:.. Runtime configuration.. Suspending and resuming program execution.. Runtime options.. There are many runtime options that can be set by the user.. Many of these are left processor-dependent by the standard, but may be set by the end user at runtime.. To get a complete list of these options, run any g95-compiled program with --g95.. Instead of running your program, you'll get a list of variables and what they are set to.. To modify a setting, set the appropriate environment variable.. Under the bash shell this is something like:.. export G95_ENDIAN=big.. Corefile Resume.. The execution of a G95-compiled programs can be suspended and resumed.. If you interrupt a program by sending it the QUIT signal, which is usually bound to control-backslash the program will write an executable file named 'dump' to the current directory.. Running this file causes the ... 316.. 48703.. 5 -426.. 53815.. 6 25.. 407673 (control-\ hit).. Process dumped.. 7 -694.. 2718.. 8 -425.. 95465.. 9 -413.. 81763.. 10 -882.. 66223.. andy@fulcrum:~/g95/g95 %.. /dump.. Restarting.. Jumping.. Any open files must be present and in the same places as in the original process.. If you link against other languages, this may not work.. While the main use is allowing you to preserve the state of a run across a reboot, other possibilities include pushing a long job through a short queue or moving a running process to another machine.. Automatic checkpointing of your program can be done by setting the environment variable G95_CHECKPOINT with the number of seconds to wait between dumps.. New checkpoint files overwrite old checkpoint files.. A program can cause a checkpoint to be written with the following code:.. subroutine dump.. interface.. function getpid() bind(c, name='getpid').. integer :: getpid.. end function getpid.. subroutine kill(signal, pid) bind(c, name='kill').. integer, value :: signal, pid.. end subroutine kill.. end interface.. call kill(getpid(), 3) ! SIGQUIT = 3.. end subroutine dump.. Original link path: /cool.shtml Open archive • Title: The G95 Project Descriptive info: Using g95 with Scilab.. Loading dlls with 'link()'.. Module Procedures.. Interfacing with Fortran in Scilab.. Loading dlls with 'link()'.. Scilab (.. scilab.. ) is a free numerical computation package similar to Matlab.. This page explains how to access Fortran procedures in Scilab 4.. In Scilab Help, under the 'fort' keyword, the following Fortran subroutine is provided as an example:.. subroutine foof(c,a,b,n,m).. integer n,m.. double precision a(*),b,c(*).. do 10 i=1,m*n.. c(i) = sin(a(i))+b.. 10 continue.. end.. The working environment for the following commands is a Msys shell in Windows.. Save the code as foof.. f90, and compile it with g95:..$ g95 -c foof.. To see how the subroutine name has been decorated , type:.. $dlltool -z foof.. def --export-all-symbols foof..$ cat foof.. def.. ;c:\mingw\bin\dlltool.. exe -z foof.. EXPORTS.. foof_ @ 1.. Note that a trailing underscore was added to the subroutine name.. The subroutine entry point is foof_.. Scilab expects external procedure names to have a trailing underscore, and g95 adds these by default to non-module procedure names.. In Linux, Scilab 'link()' can handle object files, but on Windows systems, the object files need to be compiled as dlls in order to be used in Scilab.. That is done with:.. $g95 -shared -mrtd -o foof.. dll foof.. o foof.. Using a.. def file is optional, but it was used here to illustrate how Fortran subroutines work in Scilab.. The dll should be in the Scilab working directory.. Results in Scilab.. ___________________________________________.. scilab-4.. Copyright (c) 1989-2006.. Consortium Scilab (INRIA, ENPC).. Startup execution:.. loading initial environment.. -- cd c:\work;.. -- link( foof.. dll , foof );.. shared archive loaded.. Link done.. -- a=[1,2,3;4,5,6];b= %pi;.. -- [m,n]=size(a);.. -- // Inputs:.. -- // a is in position 2 and double.. -- // b 3 double.. -- // n 4 integer.. -- // m 5 integer.. --.. -- // Outputs:.. -- // c is in position 1 and double with size [m,n].. -- c=call( foof ,a,2, d ,b,3, d ,n,4, i ,m,5, i , out ,[m,n],1, d );.. -- c.. c =.. 9830636 4.. 0508901 3.. 2827127.. 3847902 2.. 1826684 2.. 8621772.. When module procedures are compiled with g95, trailing underscores are not added to procedure names.. Some method of attaching trailing underscores to procedure names is required to get module procedures to work with g95.. Several ways to do it and access module procedures in Scilab are outlined below.. ... ;.. foo_MP_foof@1.. foof_ = foo_MP_foof@1.. When compiling the dll, include the new, edited version of foofm.. def in the command line:..$ g95 -shared -mrtd -o foofm.. dll foofm.. o foofm.. Defining an alias to a module procedure name in a.. def file, the alias having a trailing underscore, and then compiling as a dll with g95, allows module procedures to be loaded in Scilab.. Add trailing underscores to procedure names.. Another option is to add trailing undercores to procedure names in the Fortran source code.. Compile the code to a dll, and call the procedure in Scilab with a name constructed from module-name _MP_ procedure-name , minus the trailing underscore.. The example code would be:.. subroutine foof_(c,a,b,n,m).. Compile the module as before and access the subroutine in Scilab using the name foo_MP_foof.. This is another, perhaps less elegant way to access module procedures compiled with g95 from within Scilab.. In the example below, another subroutine has been added to module 'foo', which is compiled as a dll with g95 and loaded in Scilab.. The second subroutine outputs the real array c, (c1 in Scilab), along with the arguments 's' and 'ch'.. The 's' argument is a real scalar and 'ch' has type character(len=4).. subroutine foofsum(c,a,b,n,m,s,ch).. bind(c, name='foofsum_') :: foofsum.. character(len=4) :: ch.. real :: a(*),b,c(*),s.. s=0.. s = s+c(i).. ch = done.. end subroutine.. Save the above code as 'foo.. Compile with:.. g95 -c foo.. g95 -shared -mrtd -o foo.. dll foo.. Scilab results:.. -- cd c:/work;.. -- foosubs=[ foof , foofsum ];.. -- link( foo.. dll ,foosubs);.. -- // In subroutine foof ,.. -- // b is in position 3 and double.. -- // c is in position 1 and real with size [m,n].. -- //.. -- // In subroutine foofsum ,.. -- // a is in position 2 and real.. -- // b is in position 3 and real.. -- // arguments following the out keyword in call statement are subroutine output.. -- // c1 is in position 1 and real with size [m,n].. -- // s is in position 6 and real.. -- // ch is in position 7 with type character(len=4).. -- [c1,s,ch] = call( foofsum ,a,2, r ,b,3, r ,n,4, i ,m,5, i ,.. -- out ,[m,n],1, r ,[1,1],6, r ,[1,4],7, c );.. -- c1.. c1 =.. 9830637 4.. 05089 3.. 8621771.. -- s.. s =.. 18.. 746304.. -- ch.. ch =.. done..

Open archive

• Title: The G95 Project
Descriptive info: August 17.. Dan Nagle reported a problem where C_LOC returned the wrong thing when given an argument of C_PTR.. August 16.. My old email address, andyv@firstinter.. net address is no more.. I was planning on letting it lapse the next time I got a bill, but I think they decided to get rid of me instead of letting me renew.. The address had too much spam overhead anyhow.. June 17.. Mat Cross sent in a valgrind issue (reading some free'd memory) inside the I/O library.. June 16.. Doug Cox has built some new windows builds.. Jens Bischoff sent in an old IBM fortran manual that describes some of the algorithms they used for the intrinsic functions.. Good stuff.. John Harper sent in a correction to the manual-- the -fzero option only zeroes scalars.. Jürgen Reuter and Elizabeth Wong sent in a problem on OSX where initialized module variables were not being handled correctly.. Turns out different versions of OSX handle these things.. June 15.. John Reid sent in a problem with writing output from a running coarray program-- the output has to be unbuffered when writing to a pipe because otherwise everything gets written at the wrong time.. A little more work on erfc() today.. Got it up to x=50 now, then had a pause because the last couple of digits ended up being wrong.. Scratched my head for a while, then did the calculation side-by-side between the x87 assembler and the arbitrary precision python.. The numerator and denominators of the rational approximation were fine, the quotient was fine out to an ulp.. The problem turned out to be calculating exponentials on the x87.. I'm not talking about run of the mill exponentials, I'm talking about calculating exp(-1000).. The way this is calculated within the x87 is to split the argument into the integer and fractional part, calculate 2^x on the fractional part, then scale by the integer part.. For exp of -1000, the top twelve bits are the integer part.. After the separation, the bottom twelve bits are garbage, leaving the bottom twelve bits of the exponential also as garbage.. So it's unfixable without a lot of extra effort.. June 14.. Michael Pock pointed out that g95 is too strict when complaining about complex constants with spaces between the sign and the real constant part.. I've got the test suite going again.. Had to update the sources in some cases because of errors that g95 now detects and in one case threw out an old version of the HDF library that calls C function in different ways leading to all kinds of errors.. I'm sure the current version uses C interop features.. Evangelos Evangelou sent in a crash on array returns that has been fixed.. This was the stare at it for an hour, change half a dozen lines and it works.. I'm glad I have the test suite working again.. June 10.. More work on erf/erfc().. I happened to run across a web page the other day that mentioned in passing that implementing erf/erfc is "nontrivial", which makes me feel better considering all the time I've put into it so far.. I am up to |x| = 5.. At x > 6.. 75, erf(x) is indistinguishable from one, and at about x > 110, erfc(x).. The divergent series gets better for larger x, so hopefully only a few more intervals will be required.. I am not so sure how good my approximations are, so I am going to set up some sort of automatic testing at some point.. The work I put into reading and writing floating numbers accurately is paying off.. June 9.. I was thinking a little today about yesterday's post on Brent's method for exponentials.. Part of the reason I wanted to share this is because it is so illustrative of how numerical analysts really work.. Sure, if you're calculating an exponential like this, you can always solve the problem by throwing more bits at it, but that isn't what Richard Brent did.. By fiddling a little with the math, he found an equivalent representation of the exponential that involves the exponential power series with a value guaranteed not to have much precision loss, some squarings that don't involve much precision loss and a multiplication involving shifts with no precision loss at all.. Beautiful.. A simpler example would be if you're writing a program involving navigation, where you'll likely end up needing (1-cos(w)) for w close to zero, which will cause a problem because cos(w) approaches one itself, leading to a huge loss of precision.. You too can be a Richard Brent and remember that cosine near zero is 1 - w^2/2! + w^4/4! -.. , making the troublesome 1-cos(x) = w^2/2! - w^4/4! +.. Which is fast and easy to calculate for small w.. Your users never notice that your program doesn't freak when they enter coordinates near the north pole because of the care you've taken.. Michael Richmond sent in another INTENT(OUT) regression in that has been fixed.. Several people have reported problems with using g95 on the Snow Leopard version of osx.. Alison Boeckmann has volunteered to help me with getting a build going.. John Reid pointed out some inaccuracies about coarray on the website that have been fixed.. Doug Cox has built some new windows and debian builds.. Matthew Halfant sent in a crash on real do-loops that has been fixed.. June 8.. Fixed another 158-warning about INTENT(OUT) dummies not being set.. Collapsed some duplicated code into a common subroutine.. It looks like some of the remaining issues are in fact problems with the suite and not g95.. Got more time in on erf(x)/erfc(x).. Turns out the way to calculate erfc(x) at large x is that divergent series I was sneering at the other day.. The trick is to recognize that it only works at large x and to quit while you're ahead.. So from zero to one, erfc(x) is just 1-erf(x), where erf(x) is the power series.. From one to ten, erfc(x) is the continued fraction, and from ten on up the divergent power series.. The power series starts working at about nine, and the continue fraction gets painful at ten.. The two agree perfectly from nine to ten.. I also had to spend some fixing the calculation of the exponential to use Brent's method instead of the usual power series, which starts losing bits for negative arguments less than around minus ten or so.. To calculate erfc(100), we need exp(-100*100) = exp(-10000).. Might seem excessive, but kind 10 and 16 numbers have go down to 10^{-4700}.. Brent's method (one of his lesser known) works like this: Let.. r = 2^{-k} (x - n log 2),.. where x is the exponential we want and n is the number of bits of desired precision.. Pick an integer k such that 0.. x = r 2^k + n log 2.. exponentiating both sides,.. exp(x) = 2^n exp(r)^{2k}.. Since 0.. June 7.. Fixed a spurious warning for an INTENT(OUT) dummy parameter not being set.. Michael Richmond and Frank Muldoon reported a regression in dummy procedures that has been fixed.. Damn.. this keyboard is sooooo smooth.. June 6.. I have a new keyboard for my laptop.. The old one has been getting worse for years.. The 'd' key came unstuck a while back and I glued it back on not very well.. I had ordered a new keyboard from Singapore, but it turned out to be for a slightly different model.. The risers were smaller than the old one for some reason and the existing screws wouldn't reach.. The new one languished until yesterday when the ENTER key got stuck.. This happens every now and then, and blowing or shaking usually removes whatever foreign matter is in the way.. But half an hour later, no luck.. So I took a look at the new one again.. Today I went off to the hardware store, and I bought a pair of longer screws and nylon spacers.. The spacers are scotch-taped to the too-short risers and the longer screws work fine.. The new keyboard is solidly in place, and it's like typing on velvet.. I think that is about the last moving part in the laptop that has been replaced.. June 5.. I realized that the glibc implementation of erf() isn't as good as I thought.. For larger x's, you calculate erf(x) by computing erf(x) = 1-erfc(x).. There is an asymptotic expansion of erfc(x) that looks like:.. erfc(x) \approx exp(-x^2) / (x \sqrt\pi) * (1 + PowerSeries(1/x^2)).. The thing is, the series digverges.. For all x, no less.. The first couple of terms in the polynomial help, but then you get the divergence problem.. The glibc implementation actually uses:.. erfc(x) \approx exp(-x^2 + R(1/x^2)) / (x \sqrt\pi).. Where R(x) is a rational approximation.. Putting the polynomial in the exponential replaces a multiplication with an addition, but there isn't a particular reason for using a rational approximation in 1/x^2.. I tried a rational approximation in x, and it worked a lot better.. I also figured out why the mysterious "#ifdef DO_NOT_USE_THIS" are there.. This comments out the Horner's rule evaluation and the new code has a set of linked partial Horner's rules.. I originally thought there was some numerical reason for this, but re-enabling the code didn't produce any signficant differences.. Turns out that the code was optimized for vector processors and the partial Horner's rules have the potential for allowing a little parallelization to happen.. Doesn't affect me for the kind=10 reals in x86 assembler, or in the quad precision, where even a lowly addition is many processor instructions.. June 3.. Got the continued fractions for erf() and erfc() going.. The continued fraction is a little faster for erf(), but it turns out that having a way to calculate erfc() is the real benefit here.. Subtracting 1-erf(x) doesn't count, because of the insane precision required.. These functions are real pains in the butt.. The problem is that the erf(x) power series is an alternating series where the numerator of the terms is a power of x and the denominator is a factorial.. The factorials eventually dominate the powers, but for larger x's that can take a while.. In the meantime, the partial sums get huge, meaning that catastrophic cancellation is required to get the ultimate sum back to one.. This means that in order to get 64 or 112 bits of some value of erf(x), many more bits of precision than that are required.. Using the continued fraction to calculate erfc(x) at large x's similarly requires a vast number of bit of precision, but not as many.. It looks like this is going to be so slow for large x that I'm going to have to use a compiled arbitrary precision library instead of my hacked python version.. I got the new test program running on ox.. I had to adjust ox's fan settings, too.. There are several that you can set in the bios, and I had it set on the slowest/quietest.. The motherboard will automatically go to the next highest setting when the CPU's get hot, but for some reason, only one setting.. About a minute into the run, I get the beeping that indicates overheating.. At the next highest setting, the fan automatically bumps up to the next setting which appears to work.. I ended up with a 12x speedup instead of the 20x that I had hoped for, but the total elapsed time is short enough to keep testing interactive.. The granularity is one cpu per test directory, which worked fine once I put the largest directories first.. The other way of doing this, a per-file granularity would be much more complicated since some files have to be compiled to create required modules.. After a little fiddling, it looks like all of this complication would only result in saving about twenty seconds or so, which isn't worth it.. June 2.. In the ongoing project for computing erf(), it turns out the best way to compute erf() on certain intervals is as 1-erfc().. There are a couple of common series for computing erfc(), but none of them practical, as far as I can see-- they call for evaluating factorials of half-integers.. So ok, I wrote the factorials in terms of gamma functions, pulled out the factor of \Gamma(1/2) = \sqrt{\pi}, ended up with a series that had cofficients in terms of Guassian "chooses", which led right back to half-integer factorials.. This isn't for evaluating erfc() within the library, this is for evaluating erfc() in order to fit a rational approximation to it.. After casting around for another way, I hit on evaluating upper and lower gamma functions (which lead straight to erf() and erfc()) via continued fractions.. I'd sort of wondered for years how you actually evaluate a continued fraction, and it wasn't long until I got Lentz's algorithm working.. In this method, you pass a generating function to the Lentz evaluation subroutine.. This subroutine calls the generating function with an iteration number and the generating function returns a pair of numbers that are the numerator and summand of the corresponding denominator.. The Lentz evaluator keeps asking for more terms until the fraction converges.. Slick, but a little complicated when it comes to writing the generating function.. Several bugs that people have been reporting are regressions against earlier versions of g95.. Regressions are always something I have to watch out for.. For a long time now, I've haven't been very good about running the test suite.. After giving the matter some thought, I realize that this is because it takes way too long to run.. Right now, the suite runs on the laptop that I use for g95, a 1.. 3G Pentium-III.. The plan is to move it to ox, my quad core Xeon.. I've seen a speedup by a factor of five for the python program I've been using for the floating point library work, and with ox's four stomachs, I'm hoping for a factor of twenty.. I've written about 200 lines to make the testing program multicore, in the same way as the build script.. Now I have to debug it, and it's always a pain to debug child processes where the standard descriptors have been redirected.. May 31.. Got Remez's algorithm working.. Turns out the 'e' in the prior post is not an input, it is an output.. You take one more x and solve for e as part of the linear system.. This make a lot more sense.. You get an e out that gives you a ballpark idea of how good the approximation is.. The method isn't perfect in the sense that if pushed too hard, the rational approximation will get an extra oscillation on the edge far outside the desired tolerance.. You have to check the final approximation, but it looks like the basic algorithm will work fine.. I've got three intervals working for kind=10 erf().. There are a few more left to go.. There is a neat trick buried in glibc that I've appropriated for this work.. Viewed as an integer, real numbers have the sign bit as the most significant bit, followed by a biased exponent, followed by the most signficant bits of the mantissa.. If you load the top word of a real number as an integer, you can do integer compares to determine if a number is a not-a-number, infinity, or even compare with numbers that have 16-bit mantissas.. This works because the exponent is biased-- ie an exponent of zero really means a value of -e_max.. This was meant to simplify calculations in hardware, but there is nothing to stop us from doing the same thing with software.. You can't compare for equality without comparing all the low bits of the mantissa, but you can get a sort of "lower bounds" comparison, which works fine for figuring out which interval to use.. For kind=16 reals, since comparisons like this are vastly faster than polynomial calculations, I suspect that I will end up using a large number of crude approximations instead of a small number of high order polynomials.. May 24.. Tony Mannucci pointed out that the debug symbols were still present in the libf95.. a builds.. These aren't a lot of use to the end user, and take up about a megabyte, so I added a line in the build script to strip the symbols.. Arjan van Dijk had a problem with library paths on windows that Doug has fixed.. May 23.. Out sick for the last couple of days.. Feeling better now.. I have continued to make sporadic progress on the extended and quad precision transcendental functions.. I have Remez's algorithm almost working.. I think I'm having problems with poles, though.. A lot of transcendental functions are implemented by rational approximations over various intervals of the functions in question.. These look something like:.. p0 + p1 x + p2 x^2 +.. R(x) = ------------------------ \approx f(x) q0 + q1 x + q2 x^2 +.. Which can be tuned to the function be approximated-- in my library q0 is always one, and you can specify which p's and q's are zero up front.. I can get a straight polynomial approximation by not using any q's.. If you pick a set of as many x's as you have unknown p's and q's, in the interval that you are approximating the function over, you get a system of linear equations that you can solve for the p's and q's.. Where do the x's come from? Since this is a library for lots of people to use, we want the best approximation possible and a standard way to go is to minimize the maximum error, the minimax solution.. By construction, the approximation is equal to f(x) at the x's that you pick, and R(x) oscillates between too big and too small in the middle.. So you pick a tolerance, e, smaller than the precision of the target numbers and fit R(x) to f(x1)+e, f(x2)-e, f(x3)+e,.. over the interval in question.. There is a theorem that says that you've got the minimax solution when the values of the maximum deviations (|R(x) - f(x)|) are all the same.. If the deviation is always less than e, then you've got something that will approximate the target function to precision e.. Remez's algorithm picks an initial set of x's, fits to get the p's and q's and finds the x's of maximum deviation.. These points are bracketed by the original x's, so something like a golden search (Brent's method) can be started right away.. Once you've found where the maximum deviations are, use these for the new set of x's.. Repeat.. The x's are supposed to converge quadradically, which isn't happening for me yet.. Once I get this machinery in place, the work will be much more of a turn-the-crank operation: find the best approximation, implement it, repeat.. May 19.. Jacques Lefrere pointed out that argv[0] was being excluded from the GET_COMMAND intrinsic.. May 14.. John Harper pointed out a typo in the manual (SECNDS() is REAL, not INTEGER).. May 13.. I've been stealing a little time here and there to work on implementing the transcendental functions for kind=10 and kind=16 reals.. I've looked at the glibc sources and am confident that I can adapt many of the methods for both kind=10 and kind=16.. One required component of doing something like this is high precision arithmetic.. After all, suppose you have your brand new subroutine for calculating Bessel functions for kind=10 reals.. How do you test such a thing? Why, higher precision than kind=10, using slow but simple power series that you'd never use for the library functions.. I've taken the time to write an arbitrary precision floating point library in python.. Like the one in C buried inside g95, it uses big integers as its basis.. There is no particular reason for speed, so it's better to write something that is easy to read and maintain.. The basics: addition, subtraction, multiplication, division and comparison are done.. I spent a bit of today writing a subroutine that takes one of these numbers, rounds it to a 63-bit mantissa number and generates an assembler initialization expression for the number, ie something like:.. byte 0xD3,0x66,0x14,0x30,0xA7,0xD6,0xEF,0x6B,0x7B,0x3F ;; 3.. 1415900001111E-40.. that can easily be pasted into a larger code.. After I get this going, I'll end up creating programs for each of the transcendentals that need to be  ...   I were getting pretty confused about version numbers, until we realized that the version numbers were not propagating into the library version number.. Got that fixed and added a new documentation line describing the new '--g95 images=.. ' option.. Martien Hulsen sent in a problem with MOVE_ALLOC() that has been fixed.. April 4.. John Harper sent in a bug with NINT(), which returned an incorrect result when converting a kind=10 real on x86-64 to a kind=8 integer.. The problem was ABI conventions-- x86-64 returns kind=8 integers in the rax register, not the edx:eax pair on x86.. Fixed the analogous problems with FLOOR() and CEILING().. John McFarland sent a crash on an illegal procedure pointer declaration that has been fixed.. John also sent a correct program that was giving spurious errors for a procedure pointer assignment, also fixed.. Doug Cox built some new windows builds for MinGW and Cygwin.. Doug is discontinuing the builds against gcc 4.. 0, because of compatibility reasons against windows 98.. Piet Wertelaers sent in a problem with TRANSFER() that has been fixed.. I've fixed the web page on the sourceforge site.. Normally this is kept automatically in sync with www.. org, but my desktop upgrade caused a change in the ssh key.. Sourceforge now has the new key.. John Reid sent in another bug with SMP coarrays that has been fixed.. This one had to do with passing coarrays though dummy arguments.. Johan Klassen sent in a gift-- US 80.. 00, for beer.. Thanks Johan! It won't all go for beer-- Four Peaks has delicious beer bread that I am partial to.. April 1.. Pedro Lopes and Delbert Franz reported that the new Debian package didn't.. I had to change the upload script, and some status messags were intermingled with the archive itself.. Reinhold Bader and I were discussing a bug that seems to have vanished.. Reinhold did supply several libraries that have enabled me to build the coarray console on IA64 again.. The gateway machine at Reinhold's institute is a 16-core IA64.. There are rules against using it for computation, but it was 0-dark-thirty, and it was cool to run the monte carlo pi calculation on all 16 cores.. Doug Cox has built some new Debian packages.. I've also decided that the 'g95' name is getting too antiquated.. From now on, it will now be known as 'h96'.. March 31.. John Reid sent in another pair of problems with SMP coarrays that have been fixed.. Reinhold Bader sent in a problem with allocatable coarray components that has been fixed.. Jimmy James pointed out (from a conversation on gg95) that the trip counts for kind=8 do-loops were limited to the default integers.. Loops with kind=8 variables now have kind=8 trip counts, this is not general-- loops with kind=1 iterator variables will still have default integer trip counts.. Doug Cox built some new Debian packages.. March 30.. Michael Richmond sent in the necessary files to update the alpha build from Debian 4.. 0 to 5.. Things went smoothly.. Since it was linux, it was easy to add support for the SMP coarrays.. Reinhold Bader sent in a missing startfile that let me complete the IA64 build.. March 29.. John Reid (all hail the convener), sent in a problem with the SMP coarray implementation.. Writes by separate images to standard out can't overlap the records that they write, so there needs to be a mutex on standard output.. The network version multiplexes the output in a different way, leaving a lock unnecessary in that case.. John also sent another problem with allocatable coarrays that has been fixed.. Elliott Estrine pointed out that the new linux build was against glibc-2.. 7, which causes a problem for people on older systems.. I've switched the linux build back to glibc-2.. 6.. Jürgen Reuter sent in nasty bug involving initialization of recursive structures with multidimensional arrays that has been fixed.. March 28.. Nick Yas'ko sent in a problem with bad USE statements that has been fixed.. John Harper sent in a problem with the solaris build-- the solaris linker complains about unaligned debugging relocations.. Fixed by compiling without debugging symbols.. John lives in New Zealand-- the new version of pine that I'm now using lists the date on his mails (correctly) as 'tomorrow'.. March 26.. Martien Hulsen, Maarten Becker and Michael Richmond reported a problem with the x86-64 being unable to find the system startfiles like crt1.. o, etc.. This was an oversight on my part-- the x86-64 build is compiled using my own x86-64 system which runs a new.. distribution.. This distribution is a new-style system which does not have support for legacy 32-bit programs, so the startfiles are in /usr/lib.. I've fixed g95 to search /usr/lib64 before /usr/lib when searching for startfiles so that things will work on older systems.. March 25.. Jacques Lefrère pointed out a nasty problem with the download directories that has been fixed.. March 24.. Firmly stuck in mail hell today.. I thought I had the mail set up, but when I download a letter, it gets appended to mailbox in a different format than the other letters-- the 'new' format involves the list of the servers that the mail has passed through, and that doesn't quite jibe with the mbox format.. I thought I'd lost the last couple of letters, but they just appear glued onto the last message that pine thinks is there.. No clue on this one for now.. Update-- I found.. formail.. Mail is just a hideous hideous problem.. You get to be an expert at it when you get your system going, then forget everything you learned and have to re-learn it when you upgrade your system.. March 23.. Finished work on the new build system.. I've unfortunately deluded myself about the state of my mail setup.. I neglected my spam filter of choice,.. popfile.. I can send, but can't quite get mail correctly yet.. March 22.. Lots of new stuff.. New build is up.. New version of g95, now 0.. 93.. I've finished the 2.. 0 version of the build system.. It does all that the previous one did and much more.. It's doubled in size, from a thousand lines of python to just under two thousand.. The old one built by forking a subprocess for each build, logging into remote machines, building g95 and uploading the result.. This capability is still intact, but I am now relying much more on local cross compiles.. A "cross compiler" is a compiler that runs locally on one machine, and compiles a program meant to run on another machine, the 'target' machine.. Cross compilers are tricky to build, and require a lot of insight.. At the end, even a relatively easy build was taking about three to four hours to complete.. I now have nearly a dozen of these, and they build g95 just fine, except for a couple systems I don't quite have access to.. A few systems remain as remote builds for now.. It's impressive to watch a full build taking place.. The complete build takes about the same time as it did before, the slowdown not coming from a particularly slow legacy machine, but from the sheer volume of simultaneous processes running.. The load average peaks around eight, memory usage increases by about a hundred and fifty megs or so.. By modern standards, cheap.. New targets include freebsd7 for x86-64 and opensolaris for x86.. A minor sub-innovation I'm pleased with is in the creation of the tarballs themselves.. The tar format is quite simple and instead of putting everything into a temporary directory structure and running 'tar', the structure of the tarball is instead described by a data structure, which is traversed to create the tarball.. Compiling up a tarball, if you will.. This approach avoids a lot of unnecessary copying of files all over the place, lets me create the 'owner' of the files as 'g95' without actually having a 'g95' user on the system, makes all the timestamps identical and creates symbolic links out of nothingness.. The gzip process is still done with 'gzip', though.. The new build system also integrates another new feature-- SMP-only coarray support.. This version won't operate over networks, but it is free for use by anyone and is in the new version.. There is currently a limit of 32 images hardcoded into the library, but I would be happy to compile another version if anyone is using some monster system.. I will probably remove the limit sometime soon-- it just makes the first version easier.. SMP coarrays are currently available on x86/linux and x86-64/linux.. Other unixes shouldn't be that difficult.. I am planning a similar version for windows machines.. I started with a copy of the unix library and have started work on the port, although there are so many changes that calling it a 'rewrite' is probably more accurate.. I've spent quite some time poring through.. msdn.. and have figured out how to do everything.. It's pretty much the same-- the coarrays are stored in shared memory, pipes and mutexes will be used for the various synchronization primitives.. The orginal process spawns all of the images and so on.. This also required a change in how g95-compiled programs handle the command line, since that is the easiest way to specify the number of images you want.. As it was, the special command line argument --g95 caused a printout of the fortran runtime settings to be printed instead of running your program.. Now, the --g95 signals the start of arguments that you want to pass to the runtime library.. The special argument -- indicates that all following arguments should be passed to your program.. If a --g95 is given and no additional arguments are given, then the runtime variable settings are printed.. For example:.. out --g95.. out --g95 images=10.. out --g95 images=10 -- a b.. out a b --g95 images=10.. out a --g95 images=10 -- b.. out -- --g95.. I was running the monte carlo caluclation of pi in the.. compendium.. on ox, my quad core xeon system.. Things were going just fine for about ten minutes, until I heard that european two-tone police siren noise and the flashing red LED that ox does when it is getting a little too hot.. I had set the fan on the lowest setting for noise abatement reasons, and the fan does go to the next level when things get hot, but with all four cores going at once, it needed the third level.. I also took some time to install the newfangled CPU temperature monitors.. My system upgrade still isn't quite done.. The old disk is mounted on the new disk.. My home directory had become quite flat over the years (ie lots of files in it), and I've been working on making it more tree like.. March 2.. Download, list, install, remove, edit config files, search the web for docs, read docs, give up, start again.. Oh man.. My life for the last week.. This is why these things get put off.. The system is coming together, though.. I'm using.. , and have been pretty happy with it.. The basic installation gets you to a bare bones system where you get to install the individual packages.. I've never been very happy with Suse on my laptop (where g95 currently lives).. It's more of a kitchen-sink distribution.. Arch on the other hand is a million pieces, but they come together surprisingly well.. Your desktop system should fit you like a soft leather glove.. Not a steel guantlet.. The old system was more like a dried-out leather glove that has become too stiff to be useful.. The video system had a nasty problem that took a long time to find.. If a character had a blue foreground, there was this weird line through the letter, always at about the eight row from the top.. After much head scratching, I found out that there is an 'underline line' VGA registers.. Apparently this was getting set to eight somewhere, after I set it to 31, the problem went away.. The wonderful console system I described in the last post doesn't work.. Although the monitor reports being in 1280x768, the monitor displays only about 148 columns (ie 1184 dots).. After much head-scratching, I remembered what happened last time-- after running in that mode for a while, the monitor eventually figures out that there is a better way of displaying things.. I've got ssh.. I've got compilers.. I've got X.. I've got printer support.. The mpage program is gone, but a2ps replaces it.. My custom vpn is going.. Gpm is working, after I had to re-enable cross console cutting and pasting.. I have enlightenment (a window manager), but haven't figured out how to configure some keyboard shortcuts that old time irix users would recognize.. I've got firefox-- the mouse wheel now works (yaay!), which it didn't with the ancient RedHat 6/Mozilla.. The old system has netscape 3 running on it, and works amazingly well, rendering pages that the old mozilla would lock up or crash on.. But the new firefox renders them all.. I've got DRI going.. I've got editors-- vi, nano.. and emacs after a struggle.. The mail system is in place.. Under the new system, I'll get and receive mail from g95.. org, which was another reason for the upgrade.. The old system looked like:.. Outbound: Me -> pine -> qmail -> ssh tunnel -> g95.. org ISP -> You.. Inbound: You -> firstinter.. net -> fetchmail -> inbox -> pine -> Me.. I had qmail built, installed and was dreading the configuration when I realized that I didn't need it.. I think I was using it mainly to buffer outbound mail if the connection went down.. A couple years ago, that went badly when the ssh tunnel went down instead, and I didn't notice it for a week until my outbound mail finally started bouncing.. The new mail system looks like:.. Outbound: Me -> alpine -> ssh tunnel -> g95.. Inbound: You -> g95.. org ISP -> fetchmail (via ssh tunnel) -> inbox -> alpine -> me.. The reason for the ssh tunnel is that the g95.. org's ISP (bluehost) doesn't let just any schmoe connect to port 25 to relay their mail.. This has to happen locally as far as they are concerned.. The tunnel on the inbound leg isn't strictly necessary (although IMAP sends passwords in cleartext), but the tunnel is already there and a little encryption never hurts.. The pine program is gone, but alpine is its new incarnation.. Arch is pretty secure by default because it runs no daemons, not even inetd.. Nevertheless, I have a firewall rules because I don't want ssh's port exposed to the nasty internet-- I've got ssh also listening on a nonstandard port as well as the usual 22 for internal requests.. There are things to do, but the end is in sight.. I need TeX, which is now 'TeX Live!' instead of the venerable TeTex.. I'm really looking forward to having.. lilypond.. on the desktop with the huge screen instead of just on the laptop with the worst screen.. Redirecting X doesn't work well enough.. More important-- g95's new build system is taking shape.. It'll be a major extension of the old one.. I intend to use the infrastructure I'm building for that for other projects as well.. One of.. Joel Spolsky.. 's 'Joel Tests' is whether you can build your software with a single command or not.. That used to be the case with g95, but it's slowly drifted away from that, and it is time to bring that cur to heel.. Down boy!.. February 19.. More upgrade hell.. The basic system boots now.. It's an Arch Linux system-- modern but lightweight.. OK package manager too.. I've been running it on ox (my quad core xeon-- it has four stomachs) for a while now.. One thing I really like about it is that the total boot time is about eight seconds.. Why am I refurbishing a P3 with a third the clock speed of the quad core xeon? I have other plans for ox.. I spent most of the time today getting the video mode right.. This is more important than it sounds.. If you're going to be staring at a screen for a long time, it's really important to have it be readable.. I have a really sweet 25-inch monitor that I use which can support 1920x1280, and in X, that is what it runs at.. If you tell linux to use the framebuffer in the console modes, you can get a 200x75 text mode display that is very crisp, but just a little too tiny for lots of work.. The real disadvantage of the framebuffer is that scrolling takes a visible amount of time.. On ox, I had a program that spit out about a screenfull of data per second, and the slowdown when the output hit the bottom of the screen was just painful to watch.. So I continue to do what I've done for a long time-- on boot, I set the dot clock of the video card to something well above the standard text modes without putting the card into graphics mode.. In a 1280x768 mode, an 8x12 character cell gives a 160x64 screen that is fast and readable.. There is a program called SVGATextMode that would program various SVGA chipsets, but it is not much used any more.. The documentation provided by video chipset vendors, along with code examples in X-windows is usually enough for me to the write a little code that manipulates the extended registers.. The big problem was finding a modeline that works.. And it's not just enough to find the modeline, you also have to find an intermediate mode that monitor (mine, anyhow) will accept before moving up to the real one.. But I found them.. After that, some tweaks-- turn the default rendering to green on black, set a decent timeout interval and force the cursor to be a solid blue block.. My favorite thing to do with this setup is when I'm editing something and want to check someplace else briefly, I can split the screen vertically (in emacs), go to the other place, move the cursor to the other window and do what I need to do.. When done, I get rid of the other display.. Emacs will let you link the two windows together as if you were editing a single area, but I haven't found that particularly useful.. February 18.. Deep in upgrade hell.. My desktop system, that I've used for more than a decade, is a red hat six system.. You read that right.. I can't use it for much since one small upgrade leads to half a dozen others.. The other problem it has is that the six gigabyte disk I use is always full.. The plan now is to take a new disk, install a modern system on it, and move all the old files onto the new drive, like a hermit crab finding a new and bigger shell.. The 'new' disk is 30G, so that ought to hold me for a while.. February 17.. Alexei Averchenko sent in a problem with -fone-error that has been fixed.. Warnings were being promoted to errors if this flag was given.. No build yet, I'm revamping my desktop system.. February 10.. I've been working down the mails.. Michael Parkinson found a bug on windows where the >> redirection is trashing the file instead of appending.. He sent a patch that seeks to the end, but I can't help thinking that we're seeking to the beginning of the file somehow.. We're investigating further.. February 1.. I'm changing my email.. The firstinter.. net address gets way too much spam.. Click on the link at the top left, prove your humanity to get the new one.. January 18.. Cleared up a bunch of spam + emails today.. January 17.. Some anonymous person sent a20.. 00 Four Peaks gift certificate.. Thanks so much-- I appreciate this more than you know.. December 21.. Richard Otero sent a pound of some really high-grade Scharffen Berger chocolates.. Thanks!.. December 20.. Only in my alternate reality is 'shortly' three months.. Patrick sent some extremely yummy chocolates, all the way from Switzerland.. James Beard sent a gift certificate for Four Peaks, my favorite brew pub.. That'll have to wait a little more.. Thanks guys!..

Open archive

• Title: The G95 Project
Descriptive info: September 30.. I shall return shortly.. July 22 Vivek Rao sent in a typo on the blog that has been fixed.. June 23.. Henrik Holst pointed out a path problem with the Debian build.. Doug Cox has it fixed.. Michael Richmond sent in a subtle problem with pointer interfaces that has been fixed.. I've had a chance to make a new batch of fudge with the first bit of Abraham Agay's chocolate.. The result has a different texture than what I'm used to and seems a bit more rich, even though I carefully used the usual proportions of ingredients.. Ian Harvey pointed out that nonelemental references have priority over elemental references when resolving generic procedures.. June 13.. Giorgio Pastore found a problem with exponentiation and kind=10 reals that has been fixed.. Abraham Agay sent in a batch of chocolates, all the way from Israel, too.. Thanks Abraham!.. Abraham Agay reported a problem with checkpointing on x86-linux that has been fixed.. June 1.. Jared Ahern sent in a yukky problem involving deallocating variables with allocatable coarray components that have allocatable array components.. Jürgen Reuter sent in a spurious error with procedure pointers that has been fixed.. Reinhold Straub sent in an example of incredibly illegal procedure pointer code that caused a crash.. Got this fixed now.. May 26.. Reinhold Straub sent in a crash on an invalid I/O statement that has been fixed.. Reinhold also sent in a procedure pointer bug that went away, probably one of the ones below.. May 21.. John McFarland sent in a problem with derived type component procedure pointers that has been fixed.. Mark Wieczorek sent in a problem with minval/maxval and not-a-numbers that has been fixed.. May 20.. Alison Boeckmann pointed out a problem with large object files under OSX that has been fixed.. Michael Richmond and Matthew Needham reported that the x86-64 build reverted to the old suse vendor name.. Fixed that, hopefully for the last time.. Matthew also reported that the weird crash that has been affecting the x86-64 version is now gone.. Michael Richmond sent in a mystery crash which has vanished.. Jonathon Klay sent in a broken link on the web page that has been fixed.. Finished some enhancements of the build system.. In particular, the x86-64 build should work correctly now.. Matt Cross sent in a crash dealing with INTERFACEs that has been fixed.. Michael Richmond sent in another SIZE() regression, this one caused by last night's fixed.. Hopefully all is well here now.. David Schanen sent in a problem that has vanished.. Jürgen Reuter sent in a problem with procedure pointers that has been fixed.. Other people have argued the same point Jügen has, but he included a nice example that sliced my usual counter-argument to bits.. Started work on updating the build system.. got too tired, did the x86-64 manually.. Michael Richmond and Jürgen Reuter sent in a regression for the SIZE() intrinsic.. Fixed, along with the corresponding problem in LBOUND() and UBOUND().. John McFarland sent in a nasty crash on module interface namespaces that has been fixed.. I've started a rewrite of FORALL.. Under certain circumstances, it doesn't do the right thing.. Walter Spector reported a crash-on-execution of g95 that several others have reported recently.. Walter narrowed it down to an incompatibility between versions of libc.. I plan to purchase an x86-64 system soon, which should fix this problem for good.. The purchase is contingent on no new large expenses and things seem to be working out.. Over the last week I've replaced a sink, three faucets and rebuilt two toilets.. My dad did a bunch of electrical work that included grounding many ungrounded outlets, a dining room chandelier and two bathroom lights.. Thanks Dad! The hot water heater seems to produce hot water ok, and for the first time I've left the water on overnight at the new place, since my plumbing seems to be holding.. The only real hurdle left is to make sure the refrigerator works well enough, and I only had enough time tonight to kill the toxic mold that had taken hold inside of it.. May 1.. Michael Richmond and John McFarland sent in a couple of regression involving LBOUND, UBOUND and SIZE.. These are used internally to support scalarization, and even TRANSFER().. All fixed.. Walter Spector pointed out a problem with allocatable array components and structure constructors that has been fixed.. April 30.. Reinhold Bader pointed out that the SIZE intrinsic did not allow a KIND optional argument, a 2003-ism.. Added this, along with kind support for the SHAPE, LBOUND and UBOUND intrinsics.. The x86-64 build has been hosed for several days now.. The machine was turned off.. I turned it on earlier today, but now it spews nonsensical warning messages, and I can only log into from certain machines for some unknown reason.. Working on it.. April 29.. Édouard Canot and John Reid pointed out a regression involving deallocating derived-type allocatable arrays inside of coarrays that has been fixed.. Édouard also sent in a nasty regression involving coarrays accessing remote descriptors that has been fixed.. Michael Richmod sent in a regression that has been fixed.. April 23.. Sven Handschel found a problem with statement constructs and modules that has been fixed.. John Harper pointed out an off-by-a-factor-of-two problem when reading kind=16 denormalized numbers that has been fixed.. I've also fixed a pair of distinct bugs when multiplying denormalized kind=16 numbers.. Silvio Gori found a problem with common block names  ...   back up and figure out a way to avoid the new instruction.. Obviously, this has to stop at some point if there is to be forward progress.. March 3.. Continued work on optimization of floating point printing.. Assembler is much harder to write when you are writing it to be as fast as possible.. Also continued investigating methods for quad precision sine and cosine.. A rational approximation is totally not going to work.. CORDIC looks like it has about half the multiplies of evaluating the series.. February 27.. Subrata Ray sent in a problem with passing coarray array arguments that has been fixed.. February 23.. Spent a couple hours on F2003 IEEE support.. It's mostly there already, but F2003 requires some things I wasn't expecting to do when I wrote the original code.. This is particularly nasty because it requires rewriting some inline assembler on the half a dozen different processors that g95 supports.. Cough, powerpc, cough.. I've also given some thought as how to implement transcendental functions for quad precision arithmetic-- things like sine, cosine, exponentials and logarithms.. I have a plan.. I've salvaged some code that I'd originally written for the quad-precision ascii-to-float code.. It's essentially a class library for high precision floating point.. Very easy to write given arbitrary precision integer.. I thought about using GMP, which is what g95 used years ago, but speed is not that essential and ease of use is.. Francisco Fadrique sent in a nasty combination of crashes and memory leaks having to do with derived types with allocatable components that has hopefully been fixed.. John McFarland sent in a crash for a semi-legal function pointer target that has been fixed.. Tim Bishop sent in a patch that fixed the $DESTDIR handling within the makefile.. Subrata Ray pointed out that scalar coarrays were not correctly initialized by a DATA statement.. Maarten Becker reported a problem with MAXLOC that has been fixed.. Turned out to be a regression on x86-64 only.. Several other people reported the same bug, I think.. I've started some work on F2003 IEEE support for rounding and signalling.. Had to back it out-- it looks like this has to be an all-platforms-at-once upgrade.. February 16.. Ian Harvey sent in a problem with the MOVE_ALLOC intrinsic that has been fixed.. February 4.. Bob Numrich sent in a problem with deallocating scalar coarrays that has been fixed.. I've continued working on assembler for print reals.. It's slow going.. It's also a little discouraging to spend hours writing an debugging some assembler with multiple cases and fencepost problems, only to run it and discover that your assembler is three times slower than the C version.. But, then you cheat, look at the assembler generated by the compiler, and see how it's faster.. I didn't mention it in the last post, but the assembler is for x86 and x86-64.. I'm really starting to like the x86-64 very much-- lots more registers and 64 bits.. February 3.. January 29.. Andrew Beddall kindly provide access to his system, which allowed me to trace the crash when printing kind=10 and 16 reals.. The problem is fixed.. The speedup was about 3%.. I've already got some better code lined up and more optimizations planned-- I think 10-20% isn't out of the question.. January 28.. Bob Numrich sent in a problem with multiple co-dimensions that has been fixed.. Andrew Beddall reported a crash in printing floating point numbers.. I've been working on augmenting the formatter with some assembler on x86 and x86-64 to speed it up.. I removed the optimized code and the crash vanished.. January 15.. Reinhold Bader sent in a crash when using array constructors with the NOTIFY statement.. Fixed analogous problems in QUERY and SYNC IMAGES.. January 14.. Michael Richmond pointed out an ssh problem with the coarray console that has been fixed.. Tom Hanika sent in a problem with calculating the exponential of minus infinity at compile time that has been fixed.. Subrata Ray pointed out a problem with dummy coarrays that has been fixed.. January 12.. Andrew Beddall pointed out a problem with negative integer exponents for kind=16 reals that has been fixed.. Late build today, network troubles.. January 11.. Francisco Fadrique pointed out that call graph profiling had disappeared.. January 10.. Bob Numrich sent in a coarray problem that seems to have benefitted from the fix to Subrata's code as well.. January 7.. Subrata Ray discovered a problem with the calculation of upper bounds for coarrays with more than one codimension that has been fixed.. January 6.. Had some problems with the website over the Christmas holiday.. When I re-upped with my ISP, they decided I needed to prove my identity again.. This was a little awkward, but it's been sorted out now.. Doug Cox built some new windows builds two weeks ago that are up now.. Francisco Fadrique sent in a memory leak that was a regression from a couple weeks ago that has been plugged.. Had to do with allocatable derived types in defined assignment as an actual argument.. John McFarland sent in a problem with ABSTRACT interfaces that has been fixed.. Michael Richmond sent a gift of$1000.. 00, right before Christmas.. I plan to use it to buy a new x86-64 system, since the system in the build cluster is sometimes unavailable.. My large monitor is progressively destroying the video card on my old x86 motherboard by forcing it to run too hot and fast.. Thanks Michael!..

Descriptive info: December 16.. Bil Kleb sent in a typo on the blog that has been fixed.. Michael Richmond and David Betz pointed out a crash on the coarray console that has been fixed.. John Reid sent in a bug with coarray actual arguments that has been fixed.. John Harper sent in a bug with kind=16 reals on big endian machines that has been fixed.. Allen Barnett suggested a patch to prevent a crash on runtime tracebacks when the program is being called from outside fortran.. Implemented.. December 15.. Roland Schilling sent in a problem involving a crappily formatted error message that has been fixed.. Michael Richmond pointed out a problem with locked network connection on the coarray console that has been fixed.. I've changed the keepalive messages such that they use the same method as some voice-over-IP implementations use to keep holes in firewalls.. December 12.. Guillaume Legendre sent in a crash on the SUM() intrinsic that has been fixed.. December 11.. Matthew Halfant sent in a problem involving large coarrays on x86-64 that has hopefully been fixed.. Mike Park sent in a spurious warning that has been fixed.. Bil Kleb sent in a different spurious warning that has been fixed.. Peter Lammers sent in a crash on allocatable coarray arguments that has been fixed.. December 8.. Michael Richmond sent in a network lockup problem that has been fixed.. Clive Page sent in a broken link on the web page that has been fixed.. December 7.. December 3.. John McFarland pointed out a problem with procedure pointers that has been fixed.. Bil Kleb sent in a spurious warning that has been fixed.. December 2.. Austin Godber reported success running a coarray program on Amazon's.. Elastic Compute Cloud.. (EC2).. It was actually the pi program from the compendium.. Matthew Halfant donated a rendering code that we can use for further tests.. EC2 is usually billed as a "web service", but there's no reason why you can't run a job on it.. Basically, Amazon has a huge cluster of machines that they rent time on.. The prices are currently about $0.. 10/cpu-hour, on a machine that is or the equivalent of, a 1.. 7G Xeon machine.. If you want to run your code on a hundred machines, that'll set you back$10.. 00/hour.. Sounds like a deal to me.. It looks like it can be a little tricky to do in places, but I intend to integrate EC2 with the coarray console to make it as seemless as I can.. John Harper and I exchanged a couple of mails regarding how to print 0.. 0 under strict standard f95.. It looks like you have to print it as 0.. 0e+0, but it turns out you can legally print it as 0.. Scot Breitenfeld sent in a crash on C_LOC() that has been fixed.. December 1.. Doug Cox has contributed a windows.. frequently-asked-questions.. November 30.. Matthew Halfant pointed out a problem with coarray references involving more than about a thousand bytes that has been fixed.. Matthew has a parallel rending program that does some simple load-balencing that works pretty fine.. Michael Richmond reported some network lockups that have hopefully been fixed.. Bob Numrich sent in a regression that has been fixed.. Henrik Holst reported a crash on C_ASSOCIATED that has been fixed.. The crash was easy to fix, but raised a standards question, which has been forwarded to a reliable source of answers.. November 28.. Jared Ahern sent in a pair of coarray crashes that have been fixed.. November 27.. Jorge Delia sent a crash on explicit-size coarrays that has been fixed.. Matthew Halfant sent a problem with defined assignment and coarrays that has been fixed.. Michael Richmond sent a coarray crash that has been fixed, and more typos that have been fixed.. November 25.. November 23.. Bil Kleb sent in a couple of spurious warning that have been fixed.. Michael Richmond sent some more typos in the compendium that have been fixed.. November 18.. Michael Richmond sent in more typos that have been fixed.. Walt Brainerd sent in a problem with the USE statement that has been fixed.. Jared Ahern sent a crash on coarrays with allocatable array components that has been fixed.. November 17.. Michael Richmond sent in a couple of typos that have been fixed.. Matthew Halfant sent a regression involving vector coarray expressions that has been fixed.. November 14.. Jared Ahern pointed out a problem with scalar allocatable coarrays as derived type components that has been fixed.. Bob Numrich found a problem with the initialization of allocatable coarrays that has been fixed.. Matthew Halfant found a problem with starting images on remote hosts that has been fixed.. November 12.. Bob Numrich found out that the ALLOCATED intrinsic didn't work well with allocatable coarrays.. Fixed that now.. Bob also pointed a case where CO_LBOUND wasn't working either.. Also fixed.. Michael Richmond sent in a problem with coarrays saved in modules that has been fixed, as well as a regression in the pi-calculation in the compendium that has also been fixed.. Bil Kleb pointed out a problem with the -Wunused-parameters option that has been fixed.. November 11.. Jared Ahern pointed out that NOTIFY/QUERY weren't being matched as parts of simple IF-statements.. Bob Numrich's problem with derived type containing allocatable coarray components has been fixed.. November 10.. Matthew Halfant pointed out that the keyboard-interactive method of authentication didn't work.. I was a little hampered at fixing this until I found a machine that required it.. Seems to be working now.. Bob Numrich sent in a problem that required a rework of several sections, and there are a lot of pieces still scattered about on the floor, so no build today.. November 9.. Peter Lammers and Reinhold Bader reported a pair of problems with SYNC IMAGES and array arguments that have been fixed.. One of them affected QUERY and NOTIFY as well, fixed there too.. John Reid and Jared Ahern sent in a coarray problem involving a coarray derived type argument with an allocatable components.. Jared also sent in a scalarization problem that has been fixed.. Michael Richmond sent in a problem with assumed-shape coarrays that has been fixed.. Michael Richmond, Peter Lammers (and possibly Bob Numrich, as well), sent in a regression involving scalar coarrays dummy arguments that has been fixed.. November 6.. John Reid pointed out that the N1724 paper on coarrays has been superceded by N1747.. It's been updated here.. Siegfried Meunier-Guttin-Cluzel pointed out a bullet point in the manual that was no longer correct, got that fixed now.. Mathhew Halfant found a problem with the coarray console's ssh client that is hopefully fixed.. November 5.. Siegfried Meunier-Guttin-Cluzel pointed out a crash on invalid SELECT statements that has been fixed.. Siegfried also sent in an update of the French translation of the manual.. It's now available for download.. Bil Kleb pointed out an accessibility wart on the face of fortran 95 that isn't as bad as it apparently looks.. Richard Maine had a very illuminating post on c.. l.. that helped.. John Reid sent a few more problems with passing dummy coarrays around.. Got his problems fixed, which included assumed-shape coarrays (!).. November 3.. John Reid, Bob Numrich and Michael Richmond sent some example of passing coarray parameters that weren't working, got these fixed now.. Michael Richmond tried using coarrays in COMMON blocks, which isn't permitted.. I've added a better error message and made a note in the compendium.. Michael also sent in a problem with coarrays and blanket SAVE statements that has been fixed as well as a problem with recursive functions with allocatable coarrays that has also been fixed.. Andrew Beddall sent in a problem with PRINT-ing coarrays that has been fixed, as well as a small misstatement in the compendium that has also been fixed.. October 29.. Michael Richmond pointed out a small issue with the compendium, initializations.. You can initialize coarrays in the same manner as other variables.. This is already implemented, but it deserves a mention in the compendium.. David Park pointed out a bonehead mistake in the configuration of g95 that makes it less problematic to rebuilt.. David also found a bug with -finstrument-functions that has been fixed.. October 27.. Michael Richmond sent in a crash that has been fixed, a regression from last night.. Rick Week sent in a problem with C_F_POINTER that has been fixed.. John Reid sent in another problem with coarray parameter passing that has been fixed.. Bob Numrich sent in a crash on array arguments that has been fixed.. Doug Cox sent in some corrections and additions to the manual which have been applied.. Doug also built some new windows builds.. October 26.. John Reid pointed out a problem passing coarray arguments that has been fixed.. Full coarrays were OK, but if the interface to the procedure is implicit, or does not specify a coarray on the other end, the argument is actually the local part of a coarray.. Fixed that, and updated the.. , which had things totally incorrect.. Cornelis Broeders pointed out a constraint on SAVE statements that was removed in F2003.. Fixed that.. October 23.. Bob Numrich sent in a pair of crashes on allocatable scalar coarrays and dummy array coarrays that have been fixed.. John Reid sent in a regression involving altering allocatable arrays on remote images.. October 22.. Alan Greynolds sent in a regression with -faltivec on powerpc's that has been fixed.. Norm Clerman sent some more comments about the coarray compendium which have been incorporated.. Norm even found a bug in one of John Reid's N1724 paper on coarrays.. John has been notified.. October 21.. Peter Lammers sent in a crash on allocatable coarrays where the corank was greater than one.. Norm Clerman sent in some comments on the Monte Carlo example of the coarray compendium that have been incorporated.. October 20.. Norm Clerman sent more comments on the coarray compendium.. I've update it and even remembered to upload it this time.. Sebastien Bardeau and Johan Tuitman found a coarray-related regression with the CSHIFT() intrinsic that has been fixed.. Pater Lammers sent in a crash on dummy coarrays that went away.. I'm pretty sure it was the same problem Bob Numrich found a couple days ago.. Alan Greynolds sent in a regression involving a bad fix to another scalarization problem.. All fixed now.. Michael Richmond sent a hang on out-of-memory condition that has been fixed.. Also fixed a problem building the library on sparc/linux.. Francisco Fadrique, Daniel Borchmann and Édouard Canot pointed out a memory leak in the iso_varying_strings module caused by, believe it or not, recent enhancements to kind=16 reals.. Added an optimization for functions returning derived types with allocatable components.. Mathhew Halfant sent in a memory leak that was probably one of the two above, his code seems to work fine now.. October 19.. Michael Richmond pointed out a problem on mips/linux with exponentiation that has been fixed.. Delbert Franz sent in a gift of US $250.. 00.. He's been very happy with g95 for a while now.. I plan to use this towards a new work chair, since the one I have is not in good shape.. Franck Lascaux sent in a crash on the COUNT intrinsic that has been fixed.. October 18.. Bob Numrich sent in a crash on dummy coarrays that has been fixed.. Peter Lammers sent in a problem with assignment where both left and right expressions are both coindexed expressions.. October 17.. Norm Clerman sent in more suggestions to the Coarray Compendium that have been applied.. Clarity has been improved, examples have been added.. Sebastien Bardeau suggested a bounds check in the SIZE intrinsic that has been implemented.. October 16.. Peter Lammers found an error using a READ statement on a coindexed variable that has been fixed.. October 15.. Jimmy James pointed out that illegal -i options were being consumed instead of being complained about.. Norm Clerman sent in some suggestions for the Coarray Compendium, which I've applied.. The new compendium is up.. October 14.. Steven James sent in a pair of coarray problems that have been fixed-- coarray deallocation in single-image mode and coarray console also failed to leave run mode under certain circumstances.. Walter Spector sent in a regression created during adding coarrays that prevented declaring a rank-7 array.. The fix to Wolfgang Dobler's problem of yesterday caused the build to fail on all big-endian platforms because of a syntax error I didn't notice, though that is fixed now.. October 13.. Peter Lammers pointed out a crash on a coarray program on a single image as well as over networked nodes.. Sebastian Gallinat sent in a crash on using C_LOC with allocatable arrays that has been fixed.. Wolfgang Dobler pointed out that -freal=nan did not work with complex values.. The code tried to initialize complex values with not-a-numbers using the floating point unit, which caused traps.. October 11.. October 9.. Peter Lammers sent in a crash on allocatable array coarrays that has been fixed.. Alston Misquitta sent in a spurious warning that has been suppressed.. October 8.. Elliot Chandler sent in a problem with type conversions to kind=16 reals that has been fixed.. I've added support for raising kind=16 reals to integer powers.. October 7.. Michael Richmond pointed out that the division problem with kind=16 reals on x86-64 wasn't actually fixed.. Got it fixed now, I hope.. Kris Kuhlman sent in a crash on optimization of kind=16 arithmetic.. It ended up being a bug in gcc, but there is a workaround.. October 6.. Michael Richmond, Alan Greynolds and John Dormand pointed out some extreme sloth in compile speed.. I accidentally left in some debugging code last night.. I've turned it off and done a rebuild.. Alan Greynolds and John Harper sent in a crash on kind=16 complex numbers that has been fixed.. Michael Richmond and John Dormand pointed a regression kind=16 square roots that has been fixed.. Square roots use division and the recent fix to division broke square roots.. Dusan Jovic pointed out that F2008 standardizes printing INTEGER, REAL and COMPLEX types with the B/O/Z data descriptors.. This is a common extension, available on g95 if you compiled with -fsloppy-char.. I've relaxed the necessity of compiling with -fsloppy-char.. Vivek Rao sent in scalarization problem that ended up being really nasty.. Doug Cox has built some new windows builds, with what we are pretty sure of is the code without the extra debug checks.. October 5.. Doug Cox sent some corrections to the web page that have been incorporated.. Jonathan Hogg sent in a problem with the THIS_IMAGE() intrinsic that has been fixed.. THIS_IMAGE() is a coarray intrinsic that returns the image number that it is executed on.. October 4.. Michael Richmond sent in a regression kind=16 real division that has been fixed.. October 2.. I've implemented coarrays for g95.. This is an exciting method of running a program on multiple machines, sharing variables and synchronizing.. The implementation is free for five or fewer images and is shareware for more images.. Details at.. org/coarray.. shtml.. The current implementation is for homogeneous networks of x86/linux, ia64/linux and x86-64/linux.. More ports to follow soon.. Jonathan Hogg and Reinhold Bader did a lot of the beta testing.. Now it's your turn.. Fixed ... July 21.. Alan Greynolds reported a regression in the build of osx/386, the "-arch i686" which is not supported by older versions of osx that has been fixed (by changing 686 to 386).. Charles Gerlach sent in a subtle problem with include paths and the C preprocessor that has been fixed.. Kristján Jónasson sent in a crash on some unlikely but invalid code that has been fixed.. Andrew Porter sent in a mystery crash that mysteriously has vanished.. Michael Grabietz send in a crash on arguments to intrinsic with extra parenthesis that has been fixed.. July 16.. David Acreman sent in a crash on optimization on x86/darwin.. Turned out to be some incompatibility with gcc-4.. 1, so I've downgraded back to 4.. 0, implementing the fix for the indirect branch bug.. July 15.. Reinhold Bader sent in a problem with BIND(C) common blocks that has been fixed.. July 14.. Reinhold Bader sent in a regression regarding TYPE(C_PTR) and TYPE(C_FUNPTR) that has been fixed.. Michael Richmond sent in a new build for alpha/linux.. We are collaborating at getting a regular build going again.. Vivek Rao suggested a warning for ALLOCATE and DEALLOCATE statements that has been implemented.. July 10.. I've fixed the "indirect jmp without `*'" bug on ppc/osx, incidentally upgrading g95 to use gcc-4.. 1 for that platform.. July 8.. Matthew Halfant sent in a conformance problem that mysteriously vanished.. Dave Grote sent in a problem with absolute include directories being specified during C preprocessing that has been fixed.. Charles Gerlach may have reported the same issue.. Vivek Rao pointed out a typo that has been fixed.. July 7.. Hendrik Holst pointed out that BIND(C) variable were being left symbols to be actually declared in other object files.. I've changed this to be a 'common' symbol that will define a variable if necessary, yet use another if it exists.. July 2.. Martien Hulsen sent in problem with curses that is hopefully fixed.. July 1.. Harald Anlauf sent in a crash on TRANSFER() that has been fixed.. Jonathan Hogg found a problem with -fbounds-check on x86-64 that has been fixed.. June 30.. Scot Breitenfeld pointed out some problems with C_PTR that have been fixed.. Over the last week and a half, I've been working steadily on enhancing the build system.. No real changes should be visible from the outside, but this will make things much more reliable long-time.. June 20.. Martien Hulsen pointed out a problem with THIS_IMAGE()-- it doesn't live in ISO_FORTRAN_ENV, it's a regular intrinsic.. Fixed this and the same problem with NUM_IMAGES().. June 19.. June 18.. Al Greynolds requested a nonstandard CONVERT= specifier in OPEN statements to specify endian conversion.. Legal values are 'big_endian', 'little_endian', 'native' and 'swap'.. Scot Breitenfeld sent in a problem with C_LOC that has been fixed, I think.. John Harper sent in a crash on the MERGE intrinsic that has been fixed.. Patti Michell sent in an alternate procedure for configuring mpich so that it correctly finds g95.. Added to the HOWTO.. June 12.. John Harper pointed out that IEEE_SUPPORT_* intrinsic functions weren't supported.. Added support.. Mat Cross pointed out a problem with log10(), when calculated within g95.. It was a bit off, one bit to be precise.. June 11.. Manuel Guidon sent in a crash on x86_64 that has been fixed.. Doug Cox has build some windows builds.. Matt Hauer sent in a crash on DEALLOCATE statements that has been fixed.. We're back after a disk crash.. The backup that my ISP restored was apparently a little more than a month old, so I am restoring things from my own copies as well as doing some new builds.. May 28.. May 27.. Reinhold Bader pointed out a problem with type declarations that has been fixed, as well as a problem with intrinsic module procedures and parameters in modules.. Reinhold Bader and Kristján Jónasson sent in a problem with intrinsic module procedures that has been fixed.. Roberto Dallocchio sent in a problem with logical SELECT statements that has been fixed.. James Van Buskirk contributed a number of tests of instrinsic functions that I am incorporating into the existing suite.. Things are kind of stuck with g95 at the moment, most of my build network is unavailable due to just the right router frying itself.. Repairs are under way and will hopefully be finished Saturday.. Jonathan Hogg sent in another regression on x86-64 that has been fixed.. Despite all the regressions, this upgrade has been relatively painless.. David Shanen reported that I didn't actually fix his problem.. After some more digging, I've found and fixed the problem.. Doug has also added a Debian/Ubuntu install package.. It's up on the downloads page.. Jonathan Hogg and David Shanen sent in a regression involving x86-64 array integers that has been fixed.. May 9.. Jonathan Hogg and Michael Richmond reported a regression with the array-size expansion on x86-64 that has been fixed.. May 8.. Finished the array kind index expansion.. Reinhold Bader pointed out a scalar/vector problem that has been fixed.. Work continues on the array index kind expansion.. John's test program now works, but some other regressions have been created that I've been working on those.. No new build yet.. Jean-Baptiste Faure sent in a spurious warning that has been fixed.. Bob Bauer's chocolate made some terrific fudge.. I know that I wax poetic sometimes about chocolates, but I really do love it.. For those curious about how big of a lardass I am, I've lost forty pounds in the last six months and have just recently left the realm of 'overweight' by BMI standards.. John Reid and others have pointed out that array indeces on 64-bit platforms were default integers.. This is the result of a long misunderstanding on my part.. I've changed array indeces to a integer of pointer size in the front end and most of the runtime libraries.. Haven't had a chance to test it yet.. I also baked the first batch of fudge with Bob Bauer's chocolate.. The chocolate came in 9.. 75-ounce bars, which is a lot less than the 16 ounces I usually use, but the result looks normal even without scaling the recipe down.. Will taste-test it tomorrow.. May 2.. John Harper relayed a problem from Simon Geard with reading complex numbers in DECIMAL=COMMA mode that has been fixed.. Bob Bauer sent in an assortment of.. Scharffen Berger.. chocolates.. About half baking chocolate and half eating chocolate.. I tried one of the eating bars, and it was extremely good.. Can't wait to do some baking with these.. Jens Bischoff found a crash on an invalid PARAMETER statement that has been fixed.. Lex Wennmacher discovered in a crash raising not-a-numbers to a power that has been fixed.. Reinhold Bader sent in a subtle problem with modules that has been fixed.. Keith Refson sent a crash on -fbounds-check that has been fixed.. Giorgio Pastore reported a problem with kind=10 exponentiation that has been fixed.. Aleksander Schwarzenberg-Czerny contributed some configuration files for running g95 with PGPLOT that are now available in the howto.. John Young pointed out a spelling mistak that has been fixed.. Andres Mujica pointed out that the INSTALL file in the binary builds was just a bunch of autoconf boilerplate.. I've replaced it with the original INSTALL file from previous builds.. Philippe Marguinaud found a problem with contained procedures being confused with entry points that has been fixed.. Philippe also noticed a variation of the F2003 PROCEDURE statement that has been implemented.. Al Grenolds pointed out a regression with yesterday's namelists in modules that has been fixed.. Doug Cox built some new windows builds.. April 9.. John Robinson sent in a bug with namelist and modules that has been fixed.. Kris Kuhlman pointed out a pair of regressions that affected David Bailey's mpfun package that have been fixed.. John Young suggested a warning for recursive defined assignment that has been implemented.. John also pointed out a problem with the NULLIFY statement that has been fixed.. Lionel Guez sent in a regression involving a missing error while passing a scalar to an assumed-shape array that has been fixed.. Alison Boeckmann sent in a regression involving I/O formats of arrays that has been fixed.. John Harper sent in a bug with the FLUSH statement that has been fixed.. John Young sent in a path problem with the C preprocessor that has been fixed.. Kristján Jónasson sent in a bug with allocatable array I/O formats that has been fixed.. John Peterson sent in a crash with respect to IEEE arithmetic that has been fixed.. Jun Saito reported that it was actuall Hiroshi Isakari who found the exponentiation bug from a couple days ago.. March 27.. Martien Hulsen sent a crash on a multi-component array assignment that has been fixed.. Jun Saito and Kristján Jónasson pointed out a regression in exponentiation that has been fixed.. I've added support for the F2003 move_alloc() intrinsic.. Ugo Tartaglino reported a too-zealous constraint that has been relaxed.. Michael Duda sent in a bug with -r8 and ACOS that has been fixed.. Philippe Marguinau sent in a memory allocation bug that has been fixed.. The existing binaries are the last 0.. 91 version, I've bumped things to 0.. 92.. The web pages have been updated.. It's been way too long since the last stable release.. I will do them more frequently in the future.. Finished the unix-specific and windows-specific parts of the library.. The reformat is done.. March 21.. Finished the math subsection of the runtime library.. March 20.. Finished reformatting the I/O subsection of the runtime library.. March 19.. Finished the intrinsics directory of the runtime library.. March 18.. Finished the reformat on g95.. My ideas on readability have changed somewhat since I started writing g95, and g95 is the last of my active projects to be altered to fit my new tastes.. The main thing is that I've been writing a lot more python.. Python uses indentation instead of braces to indicate grouping, and I originally started writing python code with a basic indentation of two, but it was just too cramped.. Eventually, the appreciation for four columns of python has translated itself into four columns of C.. Although I try to keep the indentation level down anyhow, this is a good compromise that is readable, it lets you get plenty of stuff with an eighty column limit, yet still isn't the wacked-out eight column tabs.. My new fan arrived today, and has been installed.. The airflow is huge compared with the old one, which apparently has been getting worse for a long time now.. On to the runtime library, which accounts for a quarter of g95.. March 17.. Kept on working the reformat.. My new cooling fan should arrive tomorrow.. March 16.. Worked on the source reformat up through the t's.. This is actually about 2/3rds of the way through the roughly 100 k-lines of source.. It looks like the source files are slightly smaller that they were, due to more tabs being used in files.. John Harper pointed ou the typo involving my "cooking fan", which should of course been "cooling fan".. I've continued on with the source reformat, I am up to source files starting with 'm'.. Henk Krus reported some new progress on running OpenGL with g95.. Details can found at:.. dolfyn.. net/dolfyn/f03gl_en.. html.. I am up to the i's in the source renovation.. A mispelling was fixed along the way.. The source renovation continues, up through the sources starting with 'd'.. I've already found and fixed one bug, which was never flagged by the C compiler due to how C is parsed.. My laptop, on which g95 is developed, has a problem with its cooling fan.. I have a new one on order, but bugs are going to have to wait.. I'm taking the opportunity to call version 0.. 91 complete.. The next will be 0.. I am now working on reformatting the code a little to reflect some of my changing tastes-- I'm changing the basic indent to four characters from two, which was too squished.. This may take a while, since there are lots of line here, and I don't trust automatic code-reindenters.. February 26.. Daniel Koester sent in a crash on procedure pointers returning arrays that caused a crash.. February 20.. Joachim Geiger and Michael Richmond pointed out a crash on x86_64.. I've also got a new build machine for x86_64.. Feburary 13.. Michael Richmond and Joachim Geiger pointed out a build problem on x86_64 that has been fixed.. Pierre St-Laurent sent a gift of CAN$50.. There was a little initial confusion at bank, but there are lots of Canadian visitors who come down to Arizona for the winter.. Thanks Pierre!.. February 7.. Michael Richmond found a problem with the fix to module procedures that has been fixed.. Eduardo Mendes wrote a HOWTO article for using MATRAN with g95.. Takeshi Enomoto sent some updates to the Japanese manual that have been applied.. February 6.. Kristján Jónasson found a crash on missing module procedures that has been fixed, and a crash on a bad NULLIFY statement also fixed.. Toby White was having some difficulties locating a memory leak, so I've added a printout of the address of leaked blocks.. Eric Johnson provided an alternative platform for linux/ppc builds.. The old platform had a power supply problem.. Angelo Graziosi send Michael Richmond pointed out the the problem with kind=10 reals under cygwin still wasn't fixed.. The problem turned out to be a case of automake not propagating CFLAGS correctly.. G nter Spahlinger sent in a pair of small patches for compiling on interix that I've applied.. January 25.. John Nabelek pointed out that list input with G95_IGNORE_ENDFILE was inconsistent with formatted reads.. Fixed list input to stop throwing endfiles if G95_IGNORE_ENDFILE is set.. Angelo Graziosi, Doug Cox and Michael Richmond pointed out a build problem with kind=10 reals that has been (hopefully) fixed.. G nter Spahlinger sent in a small patch for kind=10 reals that properly declares public subroutines.. John Reid requested a way to round small numbers to zero instead of going into denormalized numbers for the MMX floating point unit.. I've added the G95_FPU_NO_DENORMALS environment variable.. Denormals are a good idea for numerical calculations, but are apparently pretty slow.. As usual, if you want to disable the training wheels, seat belts and air bags, g95 will let you do that.. January 16.. Michael Richmond pointed out that configuration of g95 no longer matched that of the library.. That was a result of upgrading the ancient redhat system on my laptop to a recent opensuse.. The current source reflected the old autoconf, with the library hacked to make it work under the new settings.. John Harper pointed out a problem with kind=10 reals under freebsd.. Freebsd starts processes with the 80387 precision control bits set to 53 instead of 64.. I suspect this is because the freebsd people wanted to avoid the differing results when the additional precision is present.. From a numerical perspective, the additional precision can save your calculation, so I've turned it back on by default.. Ron James sent in a gift of US \$10.. I spent it on some new ski boots, which I tried out yesterday.. They work great..