1 | #!/bin/bash |
---|
2 | # script to download and install the latest version of IOIPSL |
---|
3 | # using gfortran |
---|
4 | # You'll probably have to change path to NetCDF library |
---|
5 | # below to adapt this script to your computer. |
---|
6 | |
---|
7 | #0. Preliminary stuff |
---|
8 | if (( $# == 0 )) |
---|
9 | then |
---|
10 | # default behavior: get latest version of IOIPSL |
---|
11 | rev="HEAD" |
---|
12 | else |
---|
13 | # but otherwise the first argument of the script can be the version to use |
---|
14 | if (( $# == 1 )) |
---|
15 | then |
---|
16 | rev=$1 |
---|
17 | else |
---|
18 | echo "Error, invalid script arguments" |
---|
19 | echo "Usage:" |
---|
20 | echo "$0 rev" |
---|
21 | echo " where optional rev is the IOIPSL revision number" |
---|
22 | exit |
---|
23 | fi |
---|
24 | fi |
---|
25 | |
---|
26 | # Where is the NetCDF library root located? Hopefully nf-config can tell us |
---|
27 | # but you might need an appropriate "module load netcdf***" beforehand |
---|
28 | NETCDF_HOME=$(nf-config --prefix) |
---|
29 | |
---|
30 | # cleanup possible previous attempt: |
---|
31 | \rm -rf ../../IOIPSL modipsl |
---|
32 | |
---|
33 | # 1. Get IOIPSL |
---|
34 | # move up at same level as LMDZ.COMMON , etc. |
---|
35 | cd ../.. |
---|
36 | svn co --username icmc_users --password icmc2022 --non-interactive --revision $rev http://forge.ipsl.fr/igcmg/svn/IOIPSL/trunk IOIPSL |
---|
37 | |
---|
38 | # 2. Set correct settings: make some arch.* files |
---|
39 | # Ideally these arch files should be the same as the GCM's |
---|
40 | # arch.env file (add any suitable module load here) |
---|
41 | cd IOIPSL/arch |
---|
42 | echo "" > arch-gfortran.env |
---|
43 | echo "export NETCDF_HOME=$NETCDF_HOME" >> arch-gfortran.env |
---|
44 | # arch.fcm file |
---|
45 | echo '%COMPILER gfortran' > arch-gfortran.fcm |
---|
46 | echo '%LINK gfortran' >> arch-gfortran.fcm |
---|
47 | echo '%AR ar' >> arch-gfortran.fcm |
---|
48 | echo '%MAKE make' >> arch-gfortran.fcm |
---|
49 | echo '%FPP_FLAGS -P -traditional' >> arch-gfortran.fcm |
---|
50 | echo '%BASE_FFLAGS -c -fdefault-real-8 -fdefault-double-8 -ffree-line-length-none -fno-align-commons -fcray-pointer' >> arch-gfortran.fcm |
---|
51 | echo '%PROD_FFLAGS -O3' >> arch-gfortran.fcm |
---|
52 | echo '%DEV_FFLAGS -O -Wall -fbounds-check' >> arch-gfortran.fcm |
---|
53 | echo '%DEBUG_FFLAGS -ffpe-trap=invalid,zero,overflow -fbounds-check -g3 -O0 -fstack-protector-all -finit-real=snan -fbacktrace' >> arch-gfortran.fcm |
---|
54 | echo '%MPI_FFLAGS ' >> arch-gfortran.fcm |
---|
55 | echo '%OMP_FFLAGS ' >> arch-gfortran.fcm |
---|
56 | echo '%BASE_LD ' >> arch-gfortran.fcm |
---|
57 | echo '%MPI_LD ' >> arch-gfortran.fcm |
---|
58 | echo '%OMP_LD ' >> arch-gfortran.fcm |
---|
59 | # arch.path file |
---|
60 | echo "NETCDF_INCDIR=\"-I$NETCDF_HOME/include\"" > arch-gfortran.path |
---|
61 | echo "NETCDF_LIBDIR=\"-L$NETCDF_HOME/lib\"" >> arch-gfortran.path |
---|
62 | echo 'NETCDF_LIB="-lnetcdff"' >> arch-gfortran.path |
---|
63 | echo '' >> arch-gfortran.path |
---|
64 | echo 'HDF5_INCDIR=""' >> arch-gfortran.path |
---|
65 | echo 'HDF5_LIBDIR=""' >> arch-gfortran.path |
---|
66 | echo 'HDF5_LIB=""' >> arch-gfortran.path |
---|
67 | echo '' >> arch-gfortran.path |
---|
68 | echo 'MPI_INCDIR=""' >> arch-gfortran.path |
---|
69 | echo 'MPI_LIBDIR=""' >> arch-gfortran.path |
---|
70 | echo 'MPI_LIB=""' >> arch-gfortran.path |
---|
71 | |
---|
72 | # 2.1 Switch ksh to bash in IOIPSL |
---|
73 | cd .. |
---|
74 | sed -i -e s:'/bin/ksh':"/bin/bash":1 ins_m_prec |
---|
75 | |
---|
76 | ## 3. build ioipsl: |
---|
77 | ./makeioipsl_fcm -arch gfortran -job 8 > makeioipsl.out 2>&1 |
---|
78 | |
---|
79 | ## 4. Check if the library was indeed built: |
---|
80 | whereami=`pwd -P` |
---|
81 | if [[ -f lib/libioipsl.a ]] |
---|
82 | then |
---|
83 | echo "OK: ioipsl library is in ${whereami}/lib" |
---|
84 | else |
---|
85 | echo "Something went wrong... check messages in ${whereami}/makeioipsl.out" |
---|
86 | exit |
---|
87 | fi |
---|
88 | |
---|
89 | ## 5. Comply with old setup and make appropriate links |
---|
90 | cd ../LMDZ.COMMON/ioipsl |
---|
91 | mkdir modipsl |
---|
92 | cd modipsl |
---|
93 | # lib + module files |
---|
94 | mkdir lib |
---|
95 | cd lib |
---|
96 | ln -s ../../../../IOIPSL/lib/libioipsl.a . |
---|
97 | ln -s ../../../../IOIPSL/inc/* . |
---|
98 | cd .. |
---|
99 | # rebuild utility |
---|
100 | mkdir bin |
---|
101 | cd bin |
---|
102 | ln -s ../../../../IOIPSL/bin/* . |
---|
103 | |
---|