1 |
#!/bin/bash |
2 |
# |
3 |
# $Header: /u/gcmpack/MITgcm/tools/build_options/linux_ia32_ifort+mpi_aces,v 1.8 2009/06/26 16:06:08 jmc Exp $ |
4 |
# $Name: $ |
5 |
# |
6 |
# build options used with the Intel compiler, version 8 and 9, |
7 |
# for the daily testing on ACES (which are initiated by cron jobs |
8 |
# on the "ao" head node). |
9 |
# |
10 |
# Needs the appropriate module commands, |
11 |
# and DON'T FORGET to set environment variable MPI_INC_DIR to the include |
12 |
# directory of the selected MPI implementation |
13 |
# |
14 |
#-- using default intel (v8.1) and default mpich/intel: |
15 |
# module add mpich/intel |
16 |
# module add netcdf/3.6.1/icc |
17 |
# e.g.(sh,bash): |
18 |
# export MPI_INC_DIR='/usr/local/pkg/mpich/mpich-intel/include/' |
19 |
# (and run using mpirun -machinefile my_list_of_nodes) |
20 |
# |
21 |
#-- using intel v9.0 and mpich2-intel, in this order: |
22 |
# module add ifc/9.0.021 icc/9.0.021 intel/9.0 |
23 |
# module add mpich2/1.0.3/intel |
24 |
# module add netcdf/3.6.1/icc |
25 |
# module add mpiexec (<-- to run with mpiexec) |
26 |
# e.g.(sh,bash): |
27 |
# export MPI_INC_DIR='/usr/local/pkg/mpich2/mpich2-1.0.3/intel/include/' |
28 |
# (and run using mpiexec) |
29 |
# |
30 |
#-- Multi-Threading with OpenMP: |
31 |
# -several problems with earlier version of ifort (including some version 8) |
32 |
# -with version 9 and more recent one: |
33 |
# 1) compile with genmake2 -omp option ; |
34 |
# 2) needs to set environment variable OMP_NUM_THREADS, and generally, |
35 |
# needs also to increase the thread stack-size: |
36 |
# (sh, bash) > export OMP_NUM_THREADS=2 |
37 |
# > export KMP_STACKSIZE=400m |
38 |
# (csh,tcsh) > setenv OMP_NUM_THREADS 2 |
39 |
# > setenv KMP_STACKSIZE 400m |
40 |
# NOTE: set KMP_STACKSIZE in .bashrc/.profile/.cshrc/.tcshrc is the easiest |
41 |
# way (I found) to set it for all proc; not an issue (?) for OMP_NUM_THREADS |
42 |
|
43 |
# Notes: the PBS -V option for exporting environment variables does not work |
44 |
# => need to set all env var on compute nodes |
45 |
|
46 |
FC='mpif77' |
47 |
CC='mpicc' |
48 |
F90C='mpif90 -fixed -c ' |
49 |
LINK='mpif77' |
50 |
|
51 |
#-- for NetCDF: |
52 |
INCLUDES="-I$NETCDF_INCDIR" |
53 |
INCLUDEDIRS=$NETCDF_INCDIR |
54 |
LIBS="-L$NETCDF_LIBDIR" |
55 |
|
56 |
#- for MPI: |
57 |
INCLUDES="$INCLUDES -I$MPI_INC_DIR" |
58 |
INCLUDEDIRS="$INCLUDEDIRS $MPI_INC_DIR" |
59 |
MPIINCLUDEDIR="$MPI_INC_DIR" |
60 |
MPI_HEADER_FILES='mpif.h mpiof.h' |
61 |
MPI_HEADER_FILES_INC='./mpi_headers/mpif.h ./mpi_headers/mpiof.h' |
62 |
|
63 |
DEFINES='-DALLOW_USE_MPI -DALWAYS_USE_MPI -DWORDLENGTH=4' |
64 |
CPP='cpp -traditional -P' |
65 |
EXTENDED_SRC_FLAG='-132' |
66 |
OMPFLAG='-openmp' |
67 |
|
68 |
NOOPTFLAGS='-O0' |
69 |
NOOPTFILES='mds_byteswapr8.F mds_byteswapr4.F mds_byteswapi4.F' |
70 |
|
71 |
# Note that the -mp switch is for ieee "maintain precision" and is |
72 |
# roughly equivalent to -ieee |
73 |
if test "x$IEEE" = x ; then |
74 |
FOPTIM='-O3 -align' |
75 |
#P3 FOPTIM=$FOPTIM' -tpp6 -xWKM' |
76 |
#P4 FOPTIM=$FOPTIM' -tpp7 -xWKM' |
77 |
FFLAGS="$FFLAGS -r8 -i4 -w95 -W0 -WB -assume byterecl -convert big_endian" |
78 |
else |
79 |
# FOPTIM='-O0 -noalign -CA -CB -CU -CV -CS' |
80 |
FOPTIM='-O0 -noalign -CB -CU -CV' |
81 |
FFLAGS="$FFLAGS -w95 -W0 -WB -pc64 -xW -assume byterecl -convert big_endian" |
82 |
# FLAGS="$FFLAGS -mp -w95 -W0 -WB -assume byterecl -convert big_endian" |
83 |
fi |
84 |
#- might want to use '-r8' for fizhi pkg: |
85 |
#FFLAGS="$FFLAGS -r8" |
86 |
|
87 |
F90FLAGS=$FFLAGS |
88 |
F90OPTIM=$FOPTIM |
89 |
|
90 |
NOOPTFILES=$NOOPTFILES' mitcplr_char2real.F mitcplr_real2char.F' |
91 |
NOOPTFILES=$NOOPTFILES' mitcplr_char2int.F mitcplr_int2char.F mds_byteswap.F' |