Skip to content

Commit d00d2d5

Browse files
author
Mark Wieczorek
committed
Merge with python-wrapper
2 parents 8dde6e2 + c0fcf5e commit d00d2d5

File tree

943 files changed

+68245
-4298
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

943 files changed

+68245
-4298
lines changed

.gitignore

Lines changed: 86 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,89 @@
11
*.a
22
*.mod
33
*.o
4-
examples/MarsCrustalThickness/MarsCrustalThickness
5-
examples/SHCilmPlus/TestCilmPlus
6-
examples/SHExpandDH/TestExpandDH
7-
examples/SHExpandLSQ/TestSHExpandLSQ
8-
examples/SHLocalizedAdmitCorr/LocalizedAdmitCorr
9-
examples/SHMag/SHMag
10-
examples/SHRotate/TestSHRotate
11-
examples/TimingAccuracy/TimingAccuracyDH
12-
examples/TimingAccuracy/TimingAccuracyDHC
13-
examples/TimingAccuracy/TimingAccuracyGLQ
14-
examples/TimingAccuracy/TimingAccuracyGLQC
15-
examples/fftw_wisdom/create_wisdom
16-
examples/MarsCrustalThickness/misfit.sh
17-
examples/MarsCrustalThickness/moho.sh
18-
examples/MarsCrustalThickness/thick.dat
19-
examples/SHCilmPlus/grid2d.dat
20-
examples/SHLocalizedAdmitCorr/admit_corr.dat
21-
examples/SHMag/phi_145f.dat
22-
examples/SHMag/pot_145f.dat
23-
examples/SHMag/radial_145f.dat
24-
examples/SHMag/theta_145f.dat
25-
examples/SHMag/total_145f.dat
26-
examples/SHRotate/test.dat
27-
examples/SHRotate/test.sh
28-
examples/TimingAccuracy/DH_2.maxerror
29-
examples/TimingAccuracy/DH_2.rmserror
30-
examples/TimingAccuracy/DH_2.timef
31-
examples/TimingAccuracy/DH_2.timei
32-
examples/TimingAccuracy/GLQ_2.maxerror
33-
examples/TimingAccuracy/GLQ_2.rmserror
34-
examples/TimingAccuracy/GLQ_2.timef
35-
examples/TimingAccuracy/GLQ_2.timei
36-
examples/TimingAccuracy/GLQ_m2.maxerror
37-
examples/TimingAccuracy/GLQ_m2.rmserror
38-
examples/TimingAccuracy/GLQ_m2.timef
39-
examples/TimingAccuracy/GLQ_m2.timei
40-
examples/TimingAccuracy/output1
41-
examples/TimingAccuracy/output2
42-
examples/TimingAccuracy/output3
43-
examples/TimingAccuracy/DH_m2.maxerror
44-
examples/TimingAccuracy/DH_m2.rmserror
45-
examples/TimingAccuracy/DH_m2.timef
46-
examples/TimingAccuracy/DH_m2.timei
47-
examples/TimingAccuracy/output4
48-
examples/TimingAccuracy/DHC_2.maxerror
49-
examples/TimingAccuracy/DHC_2.rmserror
50-
examples/TimingAccuracy/DHC_2.timef
51-
examples/TimingAccuracy/DHC_2.timei
52-
examples/TimingAccuracy/output5
53-
examples/TimingAccuracy/DHC_m2.maxerror
54-
examples/TimingAccuracy/DHC_m2.rmserror
55-
examples/TimingAccuracy/DHC_m2.timef
56-
examples/TimingAccuracy/DHC_m2.timei
57-
examples/TimingAccuracy/GLQC_2.maxerror
58-
examples/TimingAccuracy/GLQC_2.rmserror
59-
examples/TimingAccuracy/GLQC_2.timef
60-
examples/TimingAccuracy/GLQC_2.timei
61-
examples/TimingAccuracy/output6
62-
examples/TimingAccuracy/output7
63-
examples/TimingAccuracy/GLQC_m2.maxerror
64-
examples/TimingAccuracy/GLQC_m2.rmserror
65-
examples/TimingAccuracy/GLQC_m2.timef
66-
examples/TimingAccuracy/GLQC_m2.timei
67-
examples/TimingAccuracy/output8
4+
*.pyc
5+
*.so
6+
pyshtools/doc/
7+
examples/fortran/MarsCrustalThickness/MarsCrustalThickness
8+
examples/fortran/SHCilmPlus/TestCilmPlus
9+
examples/fortran/SHExpandDH/TestExpandDH
10+
examples/fortran/SHExpandLSQ/TestSHExpandLSQ
11+
examples/fortran/SHLocalizedAdmitCorr/LocalizedAdmitCorr
12+
examples/fortran/SHMag/SHMag
13+
examples/fortran/SHRotate/TestSHRotate
14+
examples/fortran/TimingAccuracy/TimingAccuracyDH
15+
examples/fortran/TimingAccuracy/TimingAccuracyDHC
16+
examples/fortran/TimingAccuracy/TimingAccuracyGLQ
17+
examples/fortran/TimingAccuracy/TimingAccuracyGLQC
18+
examples/fortran/fftw_wisdom/create_wisdom
19+
examples/fortran/MarsCrustalThickness/misfit.sh
20+
examples/fortran/MarsCrustalThickness/moho.sh
21+
examples/fortran/MarsCrustalThickness/thick.dat
22+
examples/fortran/SHCilmPlus/grid2d.dat
23+
examples/fortran/SHLocalizedAdmitCorr/admit_corr.dat
24+
examples/fortran/SHMag/phi_145f.dat
25+
examples/fortran/SHMag/pot_145f.dat
26+
examples/fortran/SHMag/radial_145f.dat
27+
examples/fortran/SHMag/theta_145f.dat
28+
examples/fortran/SHMag/total_145f.dat
29+
examples/fortran/SHRotate/test.dat
30+
examples/fortran/SHRotate/test.sh
31+
examples/fortran/TimingAccuracy/DH_2.maxerror
32+
examples/fortran/TimingAccuracy/DH_2.rmserror
33+
examples/fortran/TimingAccuracy/DH_2.timef
34+
examples/fortran/TimingAccuracy/DH_2.timei
35+
examples/fortran/TimingAccuracy/GLQ_2.maxerror
36+
examples/fortran/TimingAccuracy/GLQ_2.rmserror
37+
examples/fortran/TimingAccuracy/GLQ_2.timef
38+
examples/fortran/TimingAccuracy/GLQ_2.timei
39+
examples/fortran/TimingAccuracy/GLQ_m2.maxerror
40+
examples/fortran/TimingAccuracy/GLQ_m2.rmserror
41+
examples/fortran/TimingAccuracy/GLQ_m2.timef
42+
examples/fortran/TimingAccuracy/GLQ_m2.timei
43+
examples/fortran/TimingAccuracy/output1
44+
examples/fortran/TimingAccuracy/output2
45+
examples/fortran/TimingAccuracy/output3
46+
examples/fortran/TimingAccuracy/DH_m2.maxerror
47+
examples/fortran/TimingAccuracy/DH_m2.rmserror
48+
examples/fortran/TimingAccuracy/DH_m2.timef
49+
examples/fortran/TimingAccuracy/DH_m2.timei
50+
examples/fortran/TimingAccuracy/output4
51+
examples/fortran/TimingAccuracy/DHC_2.maxerror
52+
examples/fortran/TimingAccuracy/DHC_2.rmserror
53+
examples/fortran/TimingAccuracy/DHC_2.timef
54+
examples/fortran/TimingAccuracy/DHC_2.timei
55+
examples/fortran/TimingAccuracy/output5
56+
examples/fortran/TimingAccuracy/DHC_m2.maxerror
57+
examples/fortran/TimingAccuracy/DHC_m2.rmserror
58+
examples/fortran/TimingAccuracy/DHC_m2.timef
59+
examples/fortran/TimingAccuracy/DHC_m2.timei
60+
examples/fortran/TimingAccuracy/GLQC_2.maxerror
61+
examples/fortran/TimingAccuracy/GLQC_2.rmserror
62+
examples/fortran/TimingAccuracy/GLQC_2.timef
63+
examples/fortran/TimingAccuracy/GLQC_2.timei
64+
examples/fortran/TimingAccuracy/output6
65+
examples/fortran/TimingAccuracy/output7
66+
examples/fortran/TimingAccuracy/GLQC_m2.maxerror
67+
examples/fortran/TimingAccuracy/GLQC_m2.rmserror
68+
examples/fortran/TimingAccuracy/GLQC_m2.timef
69+
examples/fortran/TimingAccuracy/GLQC_m2.timei
70+
examples/fortran/TimingAccuracy/output8
71+
examples/python/Circles.png
72+
examples/python/GlobalSpectralAnalysis/SHCspectrum_mars.png
73+
examples/python/GlobalSpectralAnalysis/SHCtopography_mars.png
74+
examples/python/GlobalSpectralAnalysis/SHRspectrum_mars.png
75+
examples/python/GlobalSpectralAnalysis/SHRtopography_mars.png
76+
examples/python/GravMag/Filter.png
77+
examples/python/GravMag/GravGrad_C22.png
78+
examples/python/GravMag/MarsGeoid.png
79+
examples/python/GravMag/Mars_normalgravity.png
80+
examples/python/Histogram.png
81+
examples/python/IOStorageConversions/topography_mars.png
82+
examples/python/Other/Circles.png
83+
examples/python/Other/Histogram.png
84+
examples/python/TestLegendre/associatedlegendre.png
85+
examples/python/TestLegendre/legendre.png
86+
examples/python/GravMag/Mars_Grav.png
87+
examples/python/GravMag/Mars_Mag.png
88+
examples/python/GravMag/Mars_MagPowerSpectrum.png
89+
examples/python/GravMag/Mars_CrustalThicknes.png

Makefile

Lines changed: 102 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,31 @@
1717
# use FFTW and LAPACK libraries with conflicting underscore
1818
# conventions.
1919
#
20+
# make python
21+
# Compile the python wrapper with the f2py compiler. This should be
22+
# after the Fortran files are compiled.
23+
#
2024
# make clean
21-
# Remove the compile lib, module, and object files.
25+
# Remove the compiled lib, module, object, and Python files. Also removes
26+
# compiled fortran and Python tests.
2227
#
23-
# make examples
24-
# Compile example programs. Optionally, one
28+
# make fortran-tests
29+
# Compile and run example programs and test suite. Optionally, one
2530
# can specify the parameters F95="my compiler" and
2631
# F95FLAGS="my compiler flags", which should be identical to
2732
# those used to make "all".
2833
#
29-
# make remove-examples
30-
# Delete compiled example programs.
34+
# make run-fortran-tests
35+
# Run all fortran examples and test suite.
36+
#
37+
# make clean-fortran-tests
38+
# Delete compiled test suite programs.
3139
#
32-
# make run-examples
33-
# Run all examples programs.
40+
# make python-tests
41+
# Run all python tests
3442
#
43+
# make clean-python-tests
44+
# Detelet all compiled python tests
3545
# make doc
3646
# Create the man and html-man pages from input POD files.
3747
# These are PRE-MADE in the distribution, so it shouldn't
@@ -46,72 +56,104 @@
4656
#
4757
#####################################################################################
4858

49-
VERSION = 2.10
59+
VERSION = 3.0
60+
61+
F95 = gfortran
62+
F2PY = f2py
63+
PYTHON = python
5064

51-
F95 = f95
65+
FFTW = -lfftw3
66+
LAPACK = -llapack
67+
BLAS = -lblas
5268

53-
SHELL=/bin/tcsh
54-
MAKE = make
55-
DOCDIR = src/doc
69+
SHELL = /bin/tcsh
70+
MAKE = make
71+
FDOCDIR = src/fdoc
72+
PYDOCDIR = src/pydoc
5673
SRCDIR = src
57-
EXDIR = examples
74+
LIBDIR = lib
75+
INCDIR = modules
76+
FEXDIR = examples/fortran
77+
PEXDIR = examples/python
5878

5979

60-
.PHONY: all all2 all3 install doc remove-doc clean getflags examples remove-examples run-examples
61-
80+
.PHONY: all all2 all3 python install doc remove-doc clean getflags fortran-tests clean-fortran-tests run-fortran-tests run-python-tests
81+
6282
all: getflags
63-
$(MAKE) -C $(SRCDIR) -f Makefile all VERSION=$(VERSION) F95=$(F95) F95FLAGS="$(F95FLAGS)"
83+
$(MAKE) -C $(SRCDIR) -f Makefile all F95=$(F95) F95FLAGS="$(F95FLAGS)"
6484
@echo
6585
@echo MAKE SUCCESSFUL!
6686
@echo
6787
@echo ---------------------------------------------------------------------------------------------------
6888
@echo Compile your code with the following flags:
6989
@echo
70-
@echo $(F95) $(MODFLAG) $(F95FLAGS) -Llibpath -lSHTOOLS$(VERSION) -lfftw3 -lm
90+
@echo $(F95) $(MODFLAG) $(F95FLAGS) -Llibpath -lSHTOOLS $(FFTW) -lm $(LAPACK) $(BLAS)
7191
@echo
7292
@echo where modpath and libpath are replaced with their respective paths.
7393
@echo ---------------------------------------------------------------------------------------------------
7494
@echo
7595

7696
all2: getflags
77-
$(MAKE) -C $(SRCDIR) -f Makefile all2 VERSION=$(VERSION) F95=$(F95) F95FLAGS="$(F95FLAGS)"
97+
$(MAKE) -C $(SRCDIR) -f Makefile all2 F95=$(F95) F95FLAGS="$(F95FLAGS)"
7898
@echo
7999
@echo MAKE SUCCESSFUL!
80100
@echo
81101
@echo ---------------------------------------------------------------------------------------------------
82102
@echo Compile your code with the following flags:
83103
@echo
84-
@echo $(F95) $(MODFLAG) $(F95FLAGS) -Llibpath -lSHTOOLS$(VERSION) -lfftw3 -lm
104+
@echo $(F95) $(MODFLAG) $(F95FLAGS) -Llibpath -lSHTOOLS $(FFTW) -lm $(LAPACK) $(BLAS)
85105
@echo
86106
@echo where modpath and libpath are replaced with their respective paths.
87107
@echo ---------------------------------------------------------------------------------------------------
88108
@echo
89-
109+
90110
all3: getflags
91-
$(MAKE) -C $(SRCDIR) -f Makefile all3 VERSION=$(VERSION) F95=$(F95) F95FLAGS="$(F95FLAGS)"
111+
$(MAKE) -C $(SRCDIR) -f Makefile all3 F95=$(F95) F95FLAGS="$(F95FLAGS)"
92112
@echo
93113
@echo MAKE SUCCESSFUL!
94114
@echo
95115
@echo ---------------------------------------------------------------------------------------------------
96116
@echo Compile your code with the following flags:
97117
@echo
98-
@echo $(F95) $(MODFLAG) $(F95FLAGS) -Llibpath -lSHTOOLS$(VERSION) -lfftw3 -lm
118+
@echo $(F95) $(MODFLAG) $(F95FLAGS) -Llibpath -lSHTOOLS $(FFTW) -lm $(LAPACK) $(BLAS)
99119
@echo
100120
@echo where modpath and libpath are replaced with their respective paths.
101121
@echo ---------------------------------------------------------------------------------------------------
102122
@echo
103-
123+
124+
python: all
125+
$(F2PY) -I$(INCDIR) -L$(LIBDIR) --f90flags="$(F95FLAGS)" \
126+
-c $(SRCDIR)/pyshtools.pyf $(SRCDIR)/PythonWrapper.f95\
127+
-lSHTOOLS $(FFTW) -lm $(LAPACK) $(BLAS)
128+
$(F2PY) --f90flags="$(F95FLAGS)" -c $(SRCDIR)/PlanetsConstants.f95 -m _constant
129+
mv _SHTOOLS.so pyshtools/.
130+
mv _constant.so pyshtools/.
131+
mkdir -p pyshtools/doc
132+
./pyshtools/make_docs.py .
133+
@echo
134+
@echo MAKE SUCCESSFUL!
135+
@echo
136+
@echo ---------------------------------------------------------------------------------------------------
137+
@echo import shtools into Python with:
138+
@echo
139+
@echo import pyshtools as shtools
140+
@echo ---------------------------------------------------------------------------------------------------
141+
@echo
142+
104143
getflags:
105144
ifeq ($(F95),f95)
106145
# Default Absoft Pro Fortran flags
107-
F95FLAGS ?= -m64 -O3 -YEXT_NAMES=LCS -YEXT_SFX=_ -march=host
146+
F95FLAGS ?= -m64 -O3 -YEXT_NAMES=LCS -YEXT_SFX=_ -fpic
147+
#-march=host
108148
MODFLAG = -p modpath
109149
endif
110150

111151
ifeq ($(F95),gfortran)
112152
# Default gfortran flags
113-
F95FLAGS ?= -m64 -O3 -march=native
153+
#F95FLAGS ?= -m64 -fPIC -O3 # -march=native
154+
F95FLAGS ?= -m64 -fPIC -O3 # -march=native # -ggdb
114155
MODFLAG = -Imodpath
156+
#LAPACK = #"-framework accelerate" This will compile and run the fortran code, but will not compile the python library.
115157
endif
116158

117159
ifeq ($(F95),ifort)
@@ -139,33 +181,52 @@ endif
139181

140182

141183
doc:
142-
$(MAKE) -C $(DOCDIR) -f Makefile VERSION=$(VERSION)
184+
$(MAKE) -C $(FDOCDIR) -f Makefile VERSION=$(VERSION)
185+
$(MAKE) -C $(PYDOCDIR) -f Makefile VERSION=$(VERSION)
143186
@echo DOCUMENTATION SUCCESSFULLY CREATED
144187

145188
remove-doc:
146-
@rm -f man/man1/*.1
147-
@rm -f www/man/*.html
189+
-rm -f man/man1/*.1
190+
-rm -f www/man/fortran/*.html
191+
-rm -f www/man/python/*.html
148192
@echo
149193
@echo REMOVED MAN AND HTML-MAN FILES
150-
194+
151195
clean:
152-
$(MAKE) -C $(SRCDIR) -f Makefile VERSION=$(VERSION) clean
196+
-$(MAKE) -C $(SRCDIR) -f Makefile clean
197+
-rm -f pyshtools/*.so
198+
-rm -f pyshtools/*.pyc
199+
-rm -rf pyshtools/doc
200+
-$(MAKE) -C $(FEXDIR) -f Makefile clean
201+
-$(MAKE) -C $(PEXDIR) -f Makefile clean
153202
@echo
154-
@echo REMOVED LIB, MODULE, AND OBJECT FILES
203+
@echo REMOVED LIB, MODULE, OBJECT FILES, FORTRAN TESTS, COMPILED PYTHON FILES AND TESTS
155204

156-
examples: getflags
157-
$(MAKE) -C $(EXDIR) -f Makefile all VERSION=$(VERSION) F95=$(F95) F95FLAGS="$(F95FLAGS)"
205+
fortran-tests: getflags
206+
$(MAKE) -C $(FEXDIR) -f Makefile all F95=$(F95) F95FLAGS="$(F95FLAGS)" FFTW=$(FFTW) LAPACK=$(LAPACK) BLAS=$(BLAS)
158207
@echo
159-
@echo MAKE OF EXAMPLES SUCCESSFUL
208+
@echo MAKE OF FORTRAN TEST SUITE SUCCESSFUL
209+
@echo
210+
$(MAKE) -C $(FEXDIR) -f Makefile run-fortran-tests
211+
@echo
212+
@echo RAN ALL FORTRAN EXAMPLE AND TESTS
160213

161-
remove-examples:
162-
$(MAKE) -C $(EXDIR) -f Makefile clean
214+
run-fortran-tests:
215+
$(MAKE) -C $(FEXDIR) -f Makefile run-fortran-tests
163216
@echo
164-
@echo REMOVED EXAMPLE EXECUTABLES
217+
@echo RAN ALL FORTRAN EXAMPLE AND TESTS
165218

166-
run-examples:
167-
$(MAKE) -C $(EXDIR) -f Makefile run-examples
219+
clean-fortran-tests:
220+
$(MAKE) -C $(FEXDIR) -f Makefile clean
168221
@echo
169-
@echo RAN ALL EXAMPLE PROGRAMS
222+
@echo REMOVED FORTRAN TEST SUITE EXECUTABLES AND FILES
170223

171-
224+
python-tests:
225+
$(MAKE) -C $(PEXDIR) -f Makefile all PYTHON=$(PYTHON)
226+
@echo
227+
@echo RAN ALL PYTHON TESTS
228+
229+
clean-python-tests:
230+
$(MAKE) -C $(PEXDIR) -f Makefile clean
231+
@echo
232+
@echo REMOVED PYTHON TEST SUITE EXECUTABLES AND FILES

0 commit comments

Comments
 (0)