Difference between revisions of "GENIE Compiling"

From SourceWiki
Jump to navigation Jump to search
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
=Apple OSX and g95=
+
=Mac OSX - March 2010=
 +
by Greg Colbourn, with thanks to Simon Mueller
  
* POWERPC, 1.5GHZ Powerbook
+
* Intel Core 2 Duo, 2.26GHz MacBook Pro
* OSX Tiger 10.4.7, Xcode 2.4
+
* OSX Snow Leopard 10.6.2, Xcode 3.2.1
  
Genie compiles with g95, gcc and g++
+
1. Download netcdf from http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-4.0.1.tar.gz
* g95 0.90-1 (Fink download)
 
* gcc 4 (Xcode, probably)
 
* g++ 4 (Xcode, probably)
 
  
==Need to exclude biogem (code from cvs early October 2006)==
+
2. Go to unzipped netcdf directory and type following commands:
  
In genie-main makefile
+
    export FFLAGS="-m32"; export FCFLAGS="-m32"; export CFLAGS="-m32"; export CXXFLAGS="-m32"
MODULE_NAMES = igcm3 \
 
              slabocean \
 
              slabseaice \
 
              fixedocean \
 
              fixedseaice \
 
              goldstein \
 
              embm \
 
              seaice \
 
              fixedatmos \
 
              land \
 
              fixedland \
 
              fixedicesheet \
 
              fixedchem \
 
              ichem \
 
              atchem
 
#              biogem \
 
#              ichem
 
  
 +
    ./configure --prefix=[your path]/netcdf-4.0.1 FC=/usr/local/bin/gfortran F90=/usr/local/bin/gfortran CC=gcc CXX=g++ CPPFLAGS="-DpgiFortran"
  
genie-main/genie_ini_wrappers.f90: Lines 262+:
+
    make check
! call initialise_biogenie(t0,go_dt,go_lin,go_lout, &
 
! and all the arguments...
 
  
genie-main/genie_loop_wrappers.f90: Lines 676+ and 725:
+
    make install
  
! call biogenie( &
+
3. Comment out the line in the " # === GNU 'gfortran' compiler ===" section of genie-main/makefile.arc that says:
! and all the arguments...
 
  
! call rest_biogem(go_lout,'.'//go_ext)
+
    LDFLAGS += -static
  
genie-main/genie.F: Line 1688:
+
4. In user.mak have:
  
c call end_biogenie(go_sfcatm(:,:,:))
+
  F77=gfortran
 
+
  CC=gcc
==In order to work with netcdf (v3.6.1 compiled from source with g96, gcc and g++)==
+
  CXX=g++-4.0
You must compile netcdf with identical compilers to those used for genie. You may need to edit the netcdf configure script to make sure it finds the right compilers. Netcdf binaries downloaded via fin are therefore unlikely to work.
+
  NETCDF_NAME=netcdf
 
 
Then in genie-main makefile.arc comment out two flags:
 
#FFLAGS += -fno-second-underscore
 
#LDFLAGS += -static
 
 
 
Alternatively, if you can work out how to do it, compile netcdf with -fno-second-underscore. I couldn't fathom where to put that in.
 
 
 
 
 
jules@jamstec.go.jp, 30th October 2006.
 
  
 
=Compilation error with NetCDF version 4=
 
=Compilation error with NetCDF version 4=

Latest revision as of 10:51, 31 March 2010

Mac OSX - March 2010

by Greg Colbourn, with thanks to Simon Mueller

  • Intel Core 2 Duo, 2.26GHz MacBook Pro
  • OSX Snow Leopard 10.6.2, Xcode 3.2.1

1. Download netcdf from http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-4.0.1.tar.gz

2. Go to unzipped netcdf directory and type following commands:

   export FFLAGS="-m32"; export FCFLAGS="-m32"; export CFLAGS="-m32"; export CXXFLAGS="-m32"
   ./configure --prefix=[your path]/netcdf-4.0.1 FC=/usr/local/bin/gfortran F90=/usr/local/bin/gfortran CC=gcc CXX=g++ CPPFLAGS="-DpgiFortran"
   make check
   make install

3. Comment out the line in the " # === GNU 'gfortran' compiler ===" section of genie-main/makefile.arc that says:

   LDFLAGS += -static

4. In user.mak have:

  F77=gfortran
  CC=gcc
  CXX=g++-4.0
  NETCDF_NAME=netcdf

Compilation error with NetCDF version 4

If you are using identical compilers for genie and netcdf, but still get a compilation error message associated with netcdf (e.g. This module file was generated for a different platform or by an incompatible compiler or compiler release. It cannot be read), there may be a compatibility issue with your netcdf version. Switching from NetCDF version 4 (RHES4) to v3.6.1 has bypassed this problem (using Red Hat/ifort/icc), although the reason for this is not known.

k.i.c.oliver@open.ac.uk, 21st November 2006

Intel Fortran v7.1, INT() and PARAMETER()

ifcv7.1 will not compile statements of the form:

* PARAMETER (N=INT(..))

Hence they have been removed from genie-land/src/fotran/qsat.f

Gethin Williams Fri Dec 15 16:58:47 GMT 2006

New line characters in text files (UNIX/Windows)

Description of problem

UNIX uses a linefeed character (as should CVS internally), but Windows uses both carriage-return and linefeed (CR/LF). Some compilers/other tools may have trouble reading or displaying files that have the wrong new line characters for the platform. A symptom of this can be a large number of "odd-looking" compiler errors, and the problem may not be easy to spot because most code editors correctly display both UNIX and Windows new lines. Note that CVS should append the appropriate new line characters for the platform onto which a source file is checked out, but this may not be reliable.

Suggested solutions

If your text editor has an option allowing you to change the new line character, edit the option and save the file. UNIX commands are also available to do the job, for example:

  • dos2unix -ascii my_source_file.f90 my_source_file.f90
  • unix2dos -ascii my_source_file.f90 my_source_file.f90

Ian Henderson Fri Jan 12 15:49:57 GMT 2007

Standard Fortran compliance

Description of problem

Most compilers allow extensions to the Fortran language, but using these extensions may cause errors when a different (often older) compiler is used. For instance, the only format descriptor that can be used without an explicit width is the character descriptor "A", however many compilers will allow other format descriptors to be used without a width, e.g. "G", to which a default width (and number of characters right of the decimal place) is applied by the compiler.

Suggested solutions

The GENIE overnight tests are carried out on several different platforms (Linux, Windows, Solaris) with different compilers. However, it isn't practicable to test every combination of platform and compiler, so when adding significant amounts of new code to GENIE it may be worth testing on more than one compiler/platform if available.

A good check for non-standard Fortran is to compile GENIE with an appropriate compiler option that checks for standards compliance (the compiler option can be added in makefile.arc). In general, it's best to avoid non-standard Fortran unless there's a strong argument for using it.

Compiler flags for popular Fortran compilers:

  • -std -- Intel (ifort)
  • -Mstandard -- Portland (pgf90)
  • -ansi -- Sun (f95)

The ISO Fortran standard homepage is here: http://www.nag.co.uk/sc22wg5/

Ian Henderson Fri Jan 12 15:49:57 GMT 2007