1 | #! /bin/bash |
---|
2 | |
---|
3 | ### |
---|
4 | ### fmcd_gfortran.sh |
---|
5 | ### |
---|
6 | ### ---> This should be used to make MCD fortran stuff directly accessible in python |
---|
7 | ### ---> This script is for gfortran, but it is easy to adapt to your other compilers |
---|
8 | ### ---> A file fmcd.so should be created |
---|
9 | ### ---> See mcd.py for use in python. Very easy! |
---|
10 | ### |
---|
11 | ### AS. 17/04/2012. |
---|
12 | ### |
---|
13 | |
---|
14 | ### LINKS |
---|
15 | NETCDF=/home/marshttp/NETCDF/netcdf64-4.0.1_gfortran_fPIC/ |
---|
16 | wheremcd=/home/marshttp/MCD_v4.3//mcd/ |
---|
17 | |
---|
18 | ### LOG FILE |
---|
19 | touch fmcd.log |
---|
20 | \rm fmcd.log |
---|
21 | |
---|
22 | ### COPY/PREPARE SOURCES |
---|
23 | ### perform changes that makes f2py not to fail |
---|
24 | sed s/"\!\!'"/"'"/g $wheremcd/call_mcd.F | sed s/"\!'"/"'"/g | sed s/"\!"/"\n\!"/g > tmp.call_mcd.F |
---|
25 | sed s/"\!\!'"/"'"/g $wheremcd/julian.F | sed s/"\!'"/"'"/g | sed s/"\!"/"\n\!"/g > tmp.julian.F |
---|
26 | sed s/"\!\!'"/"'"/g $wheremcd/heights.F | sed s/"\!'"/"'"/g | sed s/"\!"/"\n\!"/g > tmp.heights.F |
---|
27 | sed s/"\!\!'"/"'"/g $wheremcd/constants_mcd.inc | sed s/"\!'"/"'"/g | sed s/"\!"/"\n\!"/g > constants_mcd.inc |
---|
28 | |
---|
29 | ### BUILD THROUGH f2py WHAT IS NECESSARY TO CREATE THE PYTHON FUNCTIONS |
---|
30 | touch fmcd.pyf |
---|
31 | \rm fmcd.pyf |
---|
32 | f2py -h fmcd.pyf -m fmcd tmp.call_mcd.F tmp.julian.F tmp.heights.F > fmcd.log 2>&1 |
---|
33 | |
---|
34 | ### IMPORTANT: we teach f2py about variables in the call_mcd subroutines which are intended to be out |
---|
35 | sed s/"real :: pres"/"real, intent(out) :: pres"/g fmcd.pyf | \ |
---|
36 | sed s/"real :: dens"/"real, intent(out) :: dens"/g | \ |
---|
37 | sed s/"real :: temp"/"real, intent(out) :: temp"/g | \ |
---|
38 | sed s/"real :: zonwind"/"real, intent(out) :: zonwind"/g | \ |
---|
39 | sed s/"real :: merwind"/"real, intent(out) :: merwind"/g | \ |
---|
40 | sed s/"real dimension(5) :: meanvar"/"real dimension(5),intent(out) :: meanvar"/g | \ |
---|
41 | sed s/"real dimension(100) :: extvar"/"real dimension(100),intent(out) :: extvar"/g | \ |
---|
42 | sed s/"real :: seedout"/"real, intent(out) :: seedout"/g | \ |
---|
43 | sed s/"integer :: ier"/"integer, intent(out) :: ier"/g > fmcd.pyf.modif |
---|
44 | mv fmcd.pyf.modif fmcd.pyf |
---|
45 | |
---|
46 | ### BUILD |
---|
47 | f2py -c fmcd.pyf tmp.call_mcd.F tmp.julian.F tmp.heights.F --fcompiler=gnu95 \ |
---|
48 | -L$NETCDF/lib -lnetcdf \ |
---|
49 | -lm -I$NETCDF/include \ |
---|
50 | --f90flags="-fPIC" \ |
---|
51 | --f77flags="-fPIC" \ |
---|
52 | --verbose \ |
---|
53 | > fmcd.log 2>&1 |
---|
54 | # --include-paths $NETCDF/include:$NETCDF/lib \ ---> makes it fail |
---|
55 | |
---|
56 | ### CLEAN THE PLACE |
---|
57 | \rm tmp.call_mcd.F tmp.julian.F tmp.heights.F constants_mcd.inc |
---|