Skip to content

Commit 95527e7

Browse files
authored
Merge pull request #143 from geodynamics/developer
Merge from developer
2 parents 9f1619b + b3739b8 commit 95527e7

12 files changed

+676
-535
lines changed

CMakeLists.txt

Lines changed: 100 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
# The name of our project is "SW4". CMakeLists files in this project can
22
# refer to the root source directory of the project as ${SW4_SOURCE_DIR} and
33
# to the root binary directory of the project as ${SW4_BINARY_DIR}.
4-
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
4+
CMAKE_MINIMUM_REQUIRED(VERSION 3.12)
55
PROJECT(SW4 C CXX Fortran)
66
ENABLE_LANGUAGE(Fortran)
7+
CMAKE_POLICY(SET CMP0028 NEW) # Double colon in target name means ALIAS or IMPORTED target.
8+
CMAKE_POLICY(SET CMP0074 NEW)
79

810
# Add extra CMake module path (is it still neeed?)
911
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/configs/")
@@ -44,33 +46,71 @@ FIND_PACKAGE(MPI REQUIRED)
4446
ADD_DEFINITIONS(${MPI_C_COMPILE_FLAGS})
4547
INCLUDE_DIRECTORIES(${MPI_C_INCLUDE_PATH})
4648

47-
# Allow a shorter version of the PROJ4 directory definition
48-
IF (NOT PROJ4_OSGEO4W_HOME)
49-
SET(PROJ4_OSGEO4W_HOME ${PROJ4_HOME})
50-
ENDIF (NOT PROJ4_OSGEO4W_HOME)
51-
52-
# Find proj4 installation
53-
FIND_PACKAGE(Proj4)
54-
IF (PROJ4_FOUND)
55-
ADD_DEFINITIONS(-DENABLE_PROJ4)
56-
INCLUDE_DIRECTORIES(${PROJ4_INCLUDE_DIR})
57-
# If proj4 is installed, we can also look for cencalvm
58-
FIND_PACKAGE(CENCALVM)
59-
IF (CENCALVM_FOUND)
60-
ADD_DEFINITIONS(-DENABLE_ETREE)
61-
INCLUDE_DIRECTORIES(${CENCALVM_INCLUDE_DIR})
62-
ENDIF (CENCALVM_FOUND)
63-
ENDIF (PROJ4_FOUND)
49+
# Allow a shorter version of the PROJ directory definition
50+
IF (NOT PROJ_OSGEO4W_HOME)
51+
SET(PROJ_OSGEO4W_HOME ${PROJ_HOME})
52+
ENDIF (NOT PROJ_OSGEO4W_HOME)
53+
54+
OPTION(USE_PROJ "Use PROJ." OFF)
55+
IF(USE_PROJ)
56+
FIND_PACKAGE(PROJ REQUIRED)
57+
IF (PROJ_FOUND)
58+
INCLUDE_DIRECTORIES(${PROJ_INCLUDE_DIR})
59+
if(PROJ_VERSION VERSION_LESS "6.0.0")
60+
MESSAGE(SEND_ERROR "PROJ library must be version 6 or higher")
61+
else()
62+
ADD_DEFINITIONS(-DENABLE_PROJ)
63+
endif()
64+
ENDIF (PROJ_FOUND)
65+
ENDIF (USE_PROJ)
66+
67+
OPTION(USE_HDF5 "Use HDF5." OFF)
68+
IF(USE_HDF5)
69+
FIND_PACKAGE(HDF5 REQUIRED)
70+
IF (HDF5_FOUND)
71+
ADD_DEFINITIONS(-DUSE_HDF5)
72+
INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIR})
73+
ENDIF (HDF5_FOUND)
74+
ENDIF (USE_HDF5)
75+
76+
OPTION(USE_ZFP "Use ZFP compression." OFF)
77+
IF(USE_ZFP)
78+
SET(H5Z_ZFP_USE_STATIC_LIBS ON)
79+
FIND_PACKAGE(ZFP REQUIRED CONFIG)
80+
FIND_PACKAGE(H5Z_ZFP 1.1.0 REQUIRED CONFIG)
81+
ADD_DEFINITIONS(-DUSE_ZFP)
82+
ENDIF (USE_ZFP)
83+
84+
OPTION(USE_SZ "Use SZ compression." OFF)
85+
IF(USE_SZ)
86+
FIND_PACKAGE(SZ REQUIRED)
87+
IF (SZ_FOUND)
88+
ADD_DEFINITIONS(-DUSE_SZ)
89+
INCLUDE_DIRECTORIES(${SZ_INCLUDE_DIR})
90+
ENDIF (SZ_FOUND)
91+
ENDIF (USE_SZ)
92+
93+
OPTION(USE_FFTW3 "Use FFTW3." OFF)
94+
IF(USE_FFTW3)
95+
FIND_PACKAGE(FFTW3 REQUIRED)
96+
IF (FFTW3_FOUND)
97+
ADD_DEFINITIONS(-DUSE_FFTW)
98+
INCLUDE_DIRECTORIES(${FFTW3_INCLUDE_DIR})
99+
ENDIF (FFTW3_FOUND)
100+
ENDIF (USE_FFTW3)
64101

65102
# Find BLAS and LAPACK installation
66103
FIND_PACKAGE(BLAS REQUIRED)
67104
FIND_PACKAGE(LAPACK REQUIRED)
105+
FIND_PACKAGE(OpenMP)
68106

69107
# Determine how to mangle names between Fortran and C
70108
INCLUDE(FortranCInterface)
71109
FortranCInterface_HEADER(FC.h MACRO_NAMESPACE "FC_")
72110
INCLUDE_DIRECTORIES(${SW4_BINARY_DIR})
73111
ADD_DEFINITIONS(-DCMAKE_FC_FUNC="1")
112+
INCLUDE_DIRECTORIES(${SW4_SOURCE_DIR}/src/double)
113+
INCLUDE_DIRECTORIES(${SW4_SOURCE_DIR}/src)
74114

75115
# Check validity of different flags
76116
INCLUDE(CheckCXXCompilerFlag)
@@ -100,35 +140,52 @@ SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO ${RELWITHDEBINFO_FLAGS})
100140
# Define source files
101141
FILE(GLOB SW4_QUADPACK_SRC_FILES src/quadpack/*.f)
102142

103-
SET(SW4_SRC_C_FILES src/main.C src/EW.C src/Sarray.C src/version.C src/parseInputFile.C
104-
src/ForcingTwilight.C src/curvilinearGrid.C src/parallelStuff.C src/Source.C
105-
src/MaterialProperty.C src/MaterialData.C src/material.C src/setupRun.C
143+
SET(SW4_SRC_C_FILES src/main.C src/EW.C src/Sarray.C src/version.C src/parseInputFile.C
144+
src/ForcingTwilight.C src/curvilinearGrid.C src/parallelStuff.C src/Source.C
145+
src/MaterialProperty.C src/MaterialData.C src/material.C src/setupRun.C
106146
src/solve.C src/Parallel_IO.C src/Image.C src/GridPointSource.C src/MaterialBlock.C
107-
src/TimeSeries.C src/sacsubc.C src/SuperGrid.C
108-
src/TestRayleighWave.C src/MaterialPfile.C src/Filter.C src/Polynomial.C
109-
src/SecondOrderSection.C src/time_functions.C src/Qspline.C
110-
src/EtreeFile.C src/MaterialIfile.C src/GeographicProjection.C
111-
src/Image3D.C src/MaterialVolimagefile.C src/SfileOutput.C
112-
src/MaterialRfile.C src/MaterialSfile.C src/AnisotropicMaterialBlock.C src/sacutils.C
113-
src/consintp.C src/addmemvarforcing2.C src/ESSI3D.C src/ESSI3DHDF5.C src/sachdf5.C src/readhdf5.C)
114-
115-
SET(SW4_SRC_F_FILES src/addsgd.f src/bcfort.f
116-
src/randomfield3d.f src/testsrc.f src/twilightfort.f
117-
src/boundaryOp.f src/bndryOpNoGhost.f90 src/rayleighfort.f src/twilightsgfort.f
118-
src/curvilinear4.f src/curvilinear4sg.f
119-
src/innerloop-ani-sgstr-vc.f src/checkanisomtrl.f src/computedtaniso.f
120-
src/rhs4curvilinear.f src/velsum.f src/gradients.f
121-
src/rhs4curvilinearsg.f src/energy4.f
122-
src/rhs4th3fort.f src/lamb_exact_numquad.f src/solerr3.f
123-
src/bcfortanisg.f src/ilanisocurv.f
124-
src/anisomtrltocurvilinear.f src/bcfreesurfcurvani.f
125-
src/tw_aniso_force_tt.f src/tw_aniso_force.f src/tw_ani_stiff.f90
126-
src/rhs4th3fortwind.f src/scalar_prod.f90 src/addsg4wind.f90 src/updatememvar.f90)
147+
src/TimeSeries.C src/sacsubc.C src/SuperGrid.C src/TestRayleighWave.C src/MaterialPfile.C
148+
src/Filter.C src/Polynomial.C src/SecondOrderSection.C src/time_functions.C src/Qspline.C
149+
src/MaterialIfile.C src/GeographicProjection.C src/Image3D.C src/ESSI3D.C src/ESSI3DHDF5.C
150+
src/MaterialVolimagefile.C src/MaterialRfile.C src/MaterialSfile.C src/AnisotropicMaterialBlock.C
151+
src/sacutils.C src/DataPatches.C src/addmemvarforcing2.C src/consintp.C src/oddIoddJinterp.C
152+
src/evenIoddJinterp.C src/oddIevenJinterp.C src/evenIevenJinterp.C src/CheckPoint.C src/geodyn.C
153+
src/AllDims.C src/Patch.C src/RandomizedMaterial.C src/MaterialInvtest.C src/sw4-prof.C
154+
src/sachdf5.C src/readhdf5.C src/TestTwilight.C src/TestPointSource.C src/curvilinear4sgwind.C
155+
src/TestEcons.C src/GridGenerator.C src/GridGeneratorGeneral.C src/GridGeneratorGaussianHill.C
156+
src/CurvilinearInterface2.C src/SfileOutput.C src/pseudohess.C src/fastmarching.C src/solveTT.C
157+
src/rhs4th3point.C src/MaterialGMG.C src/addsgdc.C src/bcfortc.C src/bcfortanisgc.C
158+
src/bcfreesurfcurvanic.C src/boundaryOpc.C src/energy4c.C src/checkanisomtrlc.C src/computedtanisoc.C
159+
src/curvilinear4sgc.C src/gradientsc.C src/randomfield3dc.C src/innerloop-ani-sgstr-vcc.C
160+
src/ilanisocurvc.C src/rhs4curvilinearc.C src/rhs4curvilinearsgc.C src/rhs4th3fortc.C src/solerr3c.C
161+
src/testsrcc.C src/rhs4th3windc.C src/tw_aniso_forcec.C src/tw_aniso_force_ttc.C src/velsumc.C
162+
src/twilightfortc.C src/twilightsgfortc.C src/tw_ani_stiffc.C src/anisomtrltocurvilinearc.C
163+
src/scalar_prodc.C src/updatememvarc.C src/addsg4windc.C src/bndryOpNoGhostc.C src/rhs4th3windc2.C
164+
src/Sarray.h src/double/sw4.h)
165+
166+
167+
SET(SW4_SRC_F_FILES src/rayleighfort.f src/lamb_exact_numquad.f)
127168

128169
ADD_EXECUTABLE(sw4 ${SW4_SRC_C_FILES} ${SW4_SRC_F_FILES} ${SW4_QUADPACK_SRC_FILES})
129-
TARGET_LINK_LIBRARIES(sw4 ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES}
170+
TARGET_LINK_LIBRARIES(sw4 PUBLIC ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES}
130171
${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}
131-
${PROJ4_LIBRARIES} ${CENCALVM_LIBRARIES})
172+
${PROJ_LIBRARIES} ${HDF5_LIBRARIES})
173+
174+
IF(OpenMP_FOUND)
175+
TARGET_LINK_LIBRARIES(sw4 PRIVATE OpenMP::OpenMP_CXX)
176+
ENDIF (OpenMP_FOUND)
177+
178+
IF (USE_FFTW3)
179+
TARGET_LINK_LIBRARIES(sw4 PRIVATE fftw3)
180+
ENDIF (USE_FFTW3)
181+
182+
IF (USE_PROJ)
183+
TARGET_LINK_LIBRARIES(sw4 PRIVATE PROJ::proj)
184+
ENDIF (USE_PROJ)
185+
186+
IF(USE_ZFP)
187+
TARGET_LINK_LIBRARIES(sw4 PRIVATE h5z_zfp::h5z_zfp)
188+
ENDIF (USE_ZFP)
132189

133190
# Show the banner once sw4 is built
134191
ADD_CUSTOM_COMMAND(TARGET sw4 POST_BUILD COMMAND cat ${SW4_SOURCE_DIR}/wave.txt)

Makefile

Lines changed: 11 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
#-----------------------------------------------------------------------
22
# Usage:
3-
# Default is: debug=no proj_6=yes profile=no prec=double openmp=yes hdf5=no fftw=no
4-
# make sw4 [debug=yes/no] [proj_6=yes/no] [profile=yes/no] [prec=single/double] [openmp=yes/no] [hdf5=yes/no] [zfp=yes/no] [sz=yes/no] [fftw=yes/no]
5-
# make sw4mopt [debug=yes/no] [proj_6=yes/no] [profile=yes/no] [prec=single/double] [openmp=yes/no] [hdf5=yes/no] [zfp=yes/no] [sz=yes/no] [fftw=yes/no]
3+
# Default is: debug=no proj=yes profile=no prec=double openmp=yes hdf5=no fftw=no
4+
# make sw4 [debug=yes/no] [proj=yes/no] [profile=yes/no] [prec=single/double] [openmp=yes/no] [hdf5=yes/no] [zfp=yes/no] [sz=yes/no] [fftw=yes/no]
5+
# make sw4mopt [debug=yes/no] [proj=yes/no] [profile=yes/no] [prec=single/double] [openmp=yes/no] [hdf5=yes/no] [zfp=yes/no] [sz=yes/no] [fftw=yes/no]
66
#
77
# Note: The command line settings override any variable settings in the included configuration files.
88
#
99
# This Makefile asumes that the following environmental variables have been assigned,
1010
# see note below.
11-
# proj_6 = [yes/no]
11+
# proj = [yes/no]
1212
# CXX = C++ compiler
1313
# FC = Fortran-77 compiler
1414
#
15-
# SW4ROOT = path to third party libraries (used when proj_6=yes).
15+
# SW4ROOT = path to third party libraries (used when proj=yes).
1616
# HDF5ROOT = path to hdf5 library and include files (used when hdf5=yes).
1717
# H5ZROOT = path to H5Z-ZFP library and include files (used when zfp=yes).
1818
# ZFPROOT = path to ZFP library and include files (used when zfp=yes).
@@ -63,21 +63,6 @@ else
6363
CFLAGS = -O3
6464
endif
6565

66-
ifeq ($(proj),no)
67-
proj := no
68-
else
69-
proj := yes
70-
endif
71-
72-
ifeq ($(proj_6),no)
73-
proj_6 := no
74-
else
75-
proj_6 := yes
76-
proj := no
77-
endif
78-
79-
80-
8166
fullpath := $(shell pwd)
8267

8368
HOSTNAME := $(shell hostname)
@@ -89,6 +74,7 @@ optdir := optimize
8974

9075
SW4INC = $(SW4ROOT)/include
9176
SW4LIB = $(SW4ROOT)/lib
77+
SW4LIB64 = $(SW4ROOT)/lib64
9278
#Default, override with configs/make.name. Preferably, FFTW is installed under SW4ROOT
9379
FFTWHOME = $(SW4ROOT)
9480

@@ -185,16 +171,9 @@ ifdef EXTRA_FORT_FLAGS
185171
FFLAGS += $(EXTRA_FORT_FLAGS)
186172
endif
187173

188-
ifeq ($(proj_6),yes)
189-
CXXFLAGS += -DENABLE_PROJ_6 -I$(SW4INC)
190-
linklibs += -L$(SW4LIB) -lproj -lsqlite3 -lcurl -lssl -lcrypto -Wl,-rpath,$(SW4LIB)
191-
proj := "proj_6"
192-
else ifeq ($(proj),yes)
193-
CXXFLAGS += -DENABLE_PROJ4 -I$(SW4INC)
194-
linklibs += -L$(SW4LIB) -lproj
195-
#-lsqlite3 -lcurl -lssl
196-
else
197-
proj := no
174+
ifeq ($(proj),yes)
175+
CXXFLAGS += -DENABLE_PROJ -I$(SW4INC)
176+
linklibs += -L$(SW4LIB) -L$(SW4LIB64) -lproj -lsqlite3 -Wl,-rpath,$(SW4LIB) -Wl,-rpath,$(SW4LIB64)
198177
endif
199178

200179

@@ -315,7 +294,7 @@ FMOBJOPT = $(addprefix $(builddir)/,$(MOBJOPT)) $(addprefix $(builddir)/,$(QUADP
315294
sw4: $(FSW4) $(FOBJ)
316295
@echo "*** Configuration file: '" $(foundincfile) "' ***"
317296
@echo "********* User configuration variables **************"
318-
@echo "debug=" $(debug) " profile=" $(profile) " hdf5=" $(hdf5) " proj=" $(proj) " SW4ROOT"= $(SW4ROOT)
297+
@echo "debug="$(debug) " profile="$(profile) " hdf5="$(hdf5) " proj="$(proj) " SW4ROOT"=$(SW4ROOT)
319298
@echo "CXX=" $(CXX) "EXTRA_CXX_FLAGS"= $(EXTRA_CXX_FLAGS)
320299
@echo "FC=" $(FC) " EXTRA_FORT_FLAGS=" $(EXTRA_FORT_FLAGS)
321300
@echo "EXTRA_LINK_FLAGS"= $(EXTRA_LINK_FLAGS)
@@ -329,7 +308,7 @@ sw4: $(FSW4) $(FOBJ)
329308
sw4mopt: $(FOBJ) $(FMOBJOPT)
330309
@echo "*** Configuration file: '" $(foundincfile) "' ***"
331310
@echo "********* User configuration variables **************"
332-
@echo "debug=" $(debug) " profile=" $(profile) " hdf5=" $(hdf5) " proj=" $(proj) " SW4ROOT"= $(SW4ROOT)
311+
@echo "debug="$(debug) " profile="$(profile) " hdf5="$(hdf5) " proj="$(proj) " SW4ROOT"=$(SW4ROOT)
333312
@echo "CXX=" $(CXX) "EXTRA_CXX_FLAGS"= $(EXTRA_CXX_FLAGS)
334313
@echo "FC=" $(FC) " EXTRA_FORT_FLAGS=" $(EXTRA_FORT_FLAGS)
335314
@echo "EXTRA_LINK_FLAGS"= $(EXTRA_LINK_FLAGS)

doc/SW4-Installation.pdf

35 KB
Binary file not shown.

0 commit comments

Comments
 (0)