Skip to content

Commit

Permalink
Merge pull request #143 from geodynamics/developer
Browse files Browse the repository at this point in the history
Merge from developer
  • Loading branch information
andersp committed Oct 26, 2022
2 parents 9f1619b + b3739b8 commit 95527e7
Show file tree
Hide file tree
Showing 12 changed files with 676 additions and 535 deletions.
143 changes: 100 additions & 43 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# The name of our project is "SW4". CMakeLists files in this project can
# refer to the root source directory of the project as ${SW4_SOURCE_DIR} and
# to the root binary directory of the project as ${SW4_BINARY_DIR}.
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
CMAKE_MINIMUM_REQUIRED(VERSION 3.12)
PROJECT(SW4 C CXX Fortran)
ENABLE_LANGUAGE(Fortran)
CMAKE_POLICY(SET CMP0028 NEW) # Double colon in target name means ALIAS or IMPORTED target.
CMAKE_POLICY(SET CMP0074 NEW)

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

# Allow a shorter version of the PROJ4 directory definition
IF (NOT PROJ4_OSGEO4W_HOME)
SET(PROJ4_OSGEO4W_HOME ${PROJ4_HOME})
ENDIF (NOT PROJ4_OSGEO4W_HOME)

# Find proj4 installation
FIND_PACKAGE(Proj4)
IF (PROJ4_FOUND)
ADD_DEFINITIONS(-DENABLE_PROJ4)
INCLUDE_DIRECTORIES(${PROJ4_INCLUDE_DIR})
# If proj4 is installed, we can also look for cencalvm
FIND_PACKAGE(CENCALVM)
IF (CENCALVM_FOUND)
ADD_DEFINITIONS(-DENABLE_ETREE)
INCLUDE_DIRECTORIES(${CENCALVM_INCLUDE_DIR})
ENDIF (CENCALVM_FOUND)
ENDIF (PROJ4_FOUND)
# Allow a shorter version of the PROJ directory definition
IF (NOT PROJ_OSGEO4W_HOME)
SET(PROJ_OSGEO4W_HOME ${PROJ_HOME})
ENDIF (NOT PROJ_OSGEO4W_HOME)

OPTION(USE_PROJ "Use PROJ." OFF)
IF(USE_PROJ)
FIND_PACKAGE(PROJ REQUIRED)
IF (PROJ_FOUND)
INCLUDE_DIRECTORIES(${PROJ_INCLUDE_DIR})
if(PROJ_VERSION VERSION_LESS "6.0.0")
MESSAGE(SEND_ERROR "PROJ library must be version 6 or higher")
else()
ADD_DEFINITIONS(-DENABLE_PROJ)
endif()
ENDIF (PROJ_FOUND)
ENDIF (USE_PROJ)

OPTION(USE_HDF5 "Use HDF5." OFF)
IF(USE_HDF5)
FIND_PACKAGE(HDF5 REQUIRED)
IF (HDF5_FOUND)
ADD_DEFINITIONS(-DUSE_HDF5)
INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIR})
ENDIF (HDF5_FOUND)
ENDIF (USE_HDF5)

OPTION(USE_ZFP "Use ZFP compression." OFF)
IF(USE_ZFP)
SET(H5Z_ZFP_USE_STATIC_LIBS ON)
FIND_PACKAGE(ZFP REQUIRED CONFIG)
FIND_PACKAGE(H5Z_ZFP 1.1.0 REQUIRED CONFIG)
ADD_DEFINITIONS(-DUSE_ZFP)
ENDIF (USE_ZFP)

OPTION(USE_SZ "Use SZ compression." OFF)
IF(USE_SZ)
FIND_PACKAGE(SZ REQUIRED)
IF (SZ_FOUND)
ADD_DEFINITIONS(-DUSE_SZ)
INCLUDE_DIRECTORIES(${SZ_INCLUDE_DIR})
ENDIF (SZ_FOUND)
ENDIF (USE_SZ)

OPTION(USE_FFTW3 "Use FFTW3." OFF)
IF(USE_FFTW3)
FIND_PACKAGE(FFTW3 REQUIRED)
IF (FFTW3_FOUND)
ADD_DEFINITIONS(-DUSE_FFTW)
INCLUDE_DIRECTORIES(${FFTW3_INCLUDE_DIR})
ENDIF (FFTW3_FOUND)
ENDIF (USE_FFTW3)

# Find BLAS and LAPACK installation
FIND_PACKAGE(BLAS REQUIRED)
FIND_PACKAGE(LAPACK REQUIRED)
FIND_PACKAGE(OpenMP)

# Determine how to mangle names between Fortran and C
INCLUDE(FortranCInterface)
FortranCInterface_HEADER(FC.h MACRO_NAMESPACE "FC_")
INCLUDE_DIRECTORIES(${SW4_BINARY_DIR})
ADD_DEFINITIONS(-DCMAKE_FC_FUNC="1")
INCLUDE_DIRECTORIES(${SW4_SOURCE_DIR}/src/double)
INCLUDE_DIRECTORIES(${SW4_SOURCE_DIR}/src)

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

SET(SW4_SRC_C_FILES src/main.C src/EW.C src/Sarray.C src/version.C src/parseInputFile.C
src/ForcingTwilight.C src/curvilinearGrid.C src/parallelStuff.C src/Source.C
src/MaterialProperty.C src/MaterialData.C src/material.C src/setupRun.C
SET(SW4_SRC_C_FILES src/main.C src/EW.C src/Sarray.C src/version.C src/parseInputFile.C
src/ForcingTwilight.C src/curvilinearGrid.C src/parallelStuff.C src/Source.C
src/MaterialProperty.C src/MaterialData.C src/material.C src/setupRun.C
src/solve.C src/Parallel_IO.C src/Image.C src/GridPointSource.C src/MaterialBlock.C
src/TimeSeries.C src/sacsubc.C src/SuperGrid.C
src/TestRayleighWave.C src/MaterialPfile.C src/Filter.C src/Polynomial.C
src/SecondOrderSection.C src/time_functions.C src/Qspline.C
src/EtreeFile.C src/MaterialIfile.C src/GeographicProjection.C
src/Image3D.C src/MaterialVolimagefile.C src/SfileOutput.C
src/MaterialRfile.C src/MaterialSfile.C src/AnisotropicMaterialBlock.C src/sacutils.C
src/consintp.C src/addmemvarforcing2.C src/ESSI3D.C src/ESSI3DHDF5.C src/sachdf5.C src/readhdf5.C)

SET(SW4_SRC_F_FILES src/addsgd.f src/bcfort.f
src/randomfield3d.f src/testsrc.f src/twilightfort.f
src/boundaryOp.f src/bndryOpNoGhost.f90 src/rayleighfort.f src/twilightsgfort.f
src/curvilinear4.f src/curvilinear4sg.f
src/innerloop-ani-sgstr-vc.f src/checkanisomtrl.f src/computedtaniso.f
src/rhs4curvilinear.f src/velsum.f src/gradients.f
src/rhs4curvilinearsg.f src/energy4.f
src/rhs4th3fort.f src/lamb_exact_numquad.f src/solerr3.f
src/bcfortanisg.f src/ilanisocurv.f
src/anisomtrltocurvilinear.f src/bcfreesurfcurvani.f
src/tw_aniso_force_tt.f src/tw_aniso_force.f src/tw_ani_stiff.f90
src/rhs4th3fortwind.f src/scalar_prod.f90 src/addsg4wind.f90 src/updatememvar.f90)
src/TimeSeries.C src/sacsubc.C src/SuperGrid.C src/TestRayleighWave.C src/MaterialPfile.C
src/Filter.C src/Polynomial.C src/SecondOrderSection.C src/time_functions.C src/Qspline.C
src/MaterialIfile.C src/GeographicProjection.C src/Image3D.C src/ESSI3D.C src/ESSI3DHDF5.C
src/MaterialVolimagefile.C src/MaterialRfile.C src/MaterialSfile.C src/AnisotropicMaterialBlock.C
src/sacutils.C src/DataPatches.C src/addmemvarforcing2.C src/consintp.C src/oddIoddJinterp.C
src/evenIoddJinterp.C src/oddIevenJinterp.C src/evenIevenJinterp.C src/CheckPoint.C src/geodyn.C
src/AllDims.C src/Patch.C src/RandomizedMaterial.C src/MaterialInvtest.C src/sw4-prof.C
src/sachdf5.C src/readhdf5.C src/TestTwilight.C src/TestPointSource.C src/curvilinear4sgwind.C
src/TestEcons.C src/GridGenerator.C src/GridGeneratorGeneral.C src/GridGeneratorGaussianHill.C
src/CurvilinearInterface2.C src/SfileOutput.C src/pseudohess.C src/fastmarching.C src/solveTT.C
src/rhs4th3point.C src/MaterialGMG.C src/addsgdc.C src/bcfortc.C src/bcfortanisgc.C
src/bcfreesurfcurvanic.C src/boundaryOpc.C src/energy4c.C src/checkanisomtrlc.C src/computedtanisoc.C
src/curvilinear4sgc.C src/gradientsc.C src/randomfield3dc.C src/innerloop-ani-sgstr-vcc.C
src/ilanisocurvc.C src/rhs4curvilinearc.C src/rhs4curvilinearsgc.C src/rhs4th3fortc.C src/solerr3c.C
src/testsrcc.C src/rhs4th3windc.C src/tw_aniso_forcec.C src/tw_aniso_force_ttc.C src/velsumc.C
src/twilightfortc.C src/twilightsgfortc.C src/tw_ani_stiffc.C src/anisomtrltocurvilinearc.C
src/scalar_prodc.C src/updatememvarc.C src/addsg4windc.C src/bndryOpNoGhostc.C src/rhs4th3windc2.C
src/Sarray.h src/double/sw4.h)


SET(SW4_SRC_F_FILES src/rayleighfort.f src/lamb_exact_numquad.f)

ADD_EXECUTABLE(sw4 ${SW4_SRC_C_FILES} ${SW4_SRC_F_FILES} ${SW4_QUADPACK_SRC_FILES})
TARGET_LINK_LIBRARIES(sw4 ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES}
TARGET_LINK_LIBRARIES(sw4 PUBLIC ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES}
${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}
${PROJ4_LIBRARIES} ${CENCALVM_LIBRARIES})
${PROJ_LIBRARIES} ${HDF5_LIBRARIES})

IF(OpenMP_FOUND)
TARGET_LINK_LIBRARIES(sw4 PRIVATE OpenMP::OpenMP_CXX)
ENDIF (OpenMP_FOUND)

IF (USE_FFTW3)
TARGET_LINK_LIBRARIES(sw4 PRIVATE fftw3)
ENDIF (USE_FFTW3)

IF (USE_PROJ)
TARGET_LINK_LIBRARIES(sw4 PRIVATE PROJ::proj)
ENDIF (USE_PROJ)

IF(USE_ZFP)
TARGET_LINK_LIBRARIES(sw4 PRIVATE h5z_zfp::h5z_zfp)
ENDIF (USE_ZFP)

# Show the banner once sw4 is built
ADD_CUSTOM_COMMAND(TARGET sw4 POST_BUILD COMMAND cat ${SW4_SOURCE_DIR}/wave.txt)
Expand Down
43 changes: 11 additions & 32 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
#-----------------------------------------------------------------------
# Usage:
# Default is: debug=no proj_6=yes profile=no prec=double openmp=yes hdf5=no fftw=no
# 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]
# 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]
# Default is: debug=no proj=yes profile=no prec=double openmp=yes hdf5=no fftw=no
# 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]
# 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]
#
# Note: The command line settings override any variable settings in the included configuration files.
#
# This Makefile asumes that the following environmental variables have been assigned,
# see note below.
# proj_6 = [yes/no]
# proj = [yes/no]
# CXX = C++ compiler
# FC = Fortran-77 compiler
#
# SW4ROOT = path to third party libraries (used when proj_6=yes).
# SW4ROOT = path to third party libraries (used when proj=yes).
# HDF5ROOT = path to hdf5 library and include files (used when hdf5=yes).
# H5ZROOT = path to H5Z-ZFP library and include files (used when zfp=yes).
# ZFPROOT = path to ZFP library and include files (used when zfp=yes).
Expand Down Expand Up @@ -63,21 +63,6 @@ else
CFLAGS = -O3
endif

ifeq ($(proj),no)
proj := no
else
proj := yes
endif

ifeq ($(proj_6),no)
proj_6 := no
else
proj_6 := yes
proj := no
endif



fullpath := $(shell pwd)

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

SW4INC = $(SW4ROOT)/include
SW4LIB = $(SW4ROOT)/lib
SW4LIB64 = $(SW4ROOT)/lib64
#Default, override with configs/make.name. Preferably, FFTW is installed under SW4ROOT
FFTWHOME = $(SW4ROOT)

Expand Down Expand Up @@ -185,16 +171,9 @@ ifdef EXTRA_FORT_FLAGS
FFLAGS += $(EXTRA_FORT_FLAGS)
endif

ifeq ($(proj_6),yes)
CXXFLAGS += -DENABLE_PROJ_6 -I$(SW4INC)
linklibs += -L$(SW4LIB) -lproj -lsqlite3 -lcurl -lssl -lcrypto -Wl,-rpath,$(SW4LIB)
proj := "proj_6"
else ifeq ($(proj),yes)
CXXFLAGS += -DENABLE_PROJ4 -I$(SW4INC)
linklibs += -L$(SW4LIB) -lproj
#-lsqlite3 -lcurl -lssl
else
proj := no
ifeq ($(proj),yes)
CXXFLAGS += -DENABLE_PROJ -I$(SW4INC)
linklibs += -L$(SW4LIB) -L$(SW4LIB64) -lproj -lsqlite3 -Wl,-rpath,$(SW4LIB) -Wl,-rpath,$(SW4LIB64)
endif


Expand Down Expand Up @@ -315,7 +294,7 @@ FMOBJOPT = $(addprefix $(builddir)/,$(MOBJOPT)) $(addprefix $(builddir)/,$(QUADP
sw4: $(FSW4) $(FOBJ)
@echo "*** Configuration file: '" $(foundincfile) "' ***"
@echo "********* User configuration variables **************"
@echo "debug=" $(debug) " profile=" $(profile) " hdf5=" $(hdf5) " proj=" $(proj) " SW4ROOT"= $(SW4ROOT)
@echo "debug="$(debug) " profile="$(profile) " hdf5="$(hdf5) " proj="$(proj) " SW4ROOT"=$(SW4ROOT)
@echo "CXX=" $(CXX) "EXTRA_CXX_FLAGS"= $(EXTRA_CXX_FLAGS)
@echo "FC=" $(FC) " EXTRA_FORT_FLAGS=" $(EXTRA_FORT_FLAGS)
@echo "EXTRA_LINK_FLAGS"= $(EXTRA_LINK_FLAGS)
Expand All @@ -329,7 +308,7 @@ sw4: $(FSW4) $(FOBJ)
sw4mopt: $(FOBJ) $(FMOBJOPT)
@echo "*** Configuration file: '" $(foundincfile) "' ***"
@echo "********* User configuration variables **************"
@echo "debug=" $(debug) " profile=" $(profile) " hdf5=" $(hdf5) " proj=" $(proj) " SW4ROOT"= $(SW4ROOT)
@echo "debug="$(debug) " profile="$(profile) " hdf5="$(hdf5) " proj="$(proj) " SW4ROOT"=$(SW4ROOT)
@echo "CXX=" $(CXX) "EXTRA_CXX_FLAGS"= $(EXTRA_CXX_FLAGS)
@echo "FC=" $(FC) " EXTRA_FORT_FLAGS=" $(EXTRA_FORT_FLAGS)
@echo "EXTRA_LINK_FLAGS"= $(EXTRA_LINK_FLAGS)
Expand Down
Binary file modified doc/SW4-Installation.pdf
Binary file not shown.
Loading

0 comments on commit 95527e7

Please sign in to comment.