# FC: Specify Fortran90 compiler command. FC=/usr/local/bin/gfortran # Added for displacement. # PRJ4_DIR: Specify PROJ.4 install directory. # CC&CFLAGS: Specify C compiler command and flags. PROJ4_DIR=/opt/local CC=/usr/local/bin/gcc CFLAGS=-g -I${PROJ4_DIR}/include # BASE: Specify basic compiler options. # BASE=-fpp -assume byterecl BASE=-cpp # FFTW3_INCLUDE_DIR: Specify FFTW3 include directory. FFTW3_INCLUDE_DIR=/opt/local/include # FFTW3_LIB: Specify linker options to link FFTW3. # FFTW3_LIB=-mkl=sequential FFTW3_LIB=-lfftw3 # OPT: Specify compiler options about optimization level. # OPT=-check all -warn all -O0 -g -traceback -fpe0 -I$(FFTW3_INCLUDE_DIR) # for DEBUG! # OPT=-O0 -openmp -openmp-report2 -I$(FFTW3_INCLUDE_DIR) # OPT=-O2 -openmp -openmp-report2 -I$(FFTW3_INCLUDE_DIR) OPT=-O2 -fopenmp # NETCDF: Specify the path to NetCDF library. # NETCDF=/opt/atlocal/netcdf/3.6.3 # NETCDF=/opt/atlocal/netcdf/4.1.3 NETCDF=/opt/local # LIBS: Specify linker options. # LIBS=-i-dynamic -L$(NETCDF)/lib -lnetcdf -L${PROJ4_DIR}/lib -lproj $(FFTW3_LIB) # for NetCDF3! # LIBS=-i-dynamic -L$(NETCDF)/lib -lnetcdff -lnetcdf -L/opt/atlocal/supplibs/lib -lhdf5_hl -lhdf5 -lcurl -lsz -L${PROJ4_DIR}/lib -lproj $(FFTW3_LIB) # for NetCDF4! LIBS=-L$(NETCDF)/lib -lnetcdff -lnetcdf -L/opt/local/lib -lhdf5_hl -lhdf5 -lcurl -lsz -lproj $(FFTW3_LIB) # EXEC: Specify the name of executable. EXEC=jagurs ################################################################################ ### Set parameters here! ### ################################################################################ # PREC=REAL_DBLE: All calc. (except file I/O) is performed with double precision. # DBLE_MATH: Only intrinsic math functions are performed with double precision. # Else, all calc. is performed with single precision. #PREC=DBLE_MATH PREC=REAL_DBLE # MPI=ON: MPI version is made. # Else, serial version is made. # MPI=ON # USE_ALLTOALLV=ON: Use MPI_Alltoallv for inter-nest communications. # Else, MPI_Allreduce is used. USE_ALLTOALLV=ON # A2A3D=ON: Use A2A3D for inter-nest communications. # This is valid only if USE_ALLTOALLV=ON. #A2A3D=ON # SINGLE_A2A=ON: Use SINGLE_A2A for inter-nest communications. # This is valid only if USE_ALLTOALLV=ON. #SINGLE_A2A=ON # TIMER=ON: Built-in timer is available. # DETAIL: More detail. # Else, built-in timer is disabled. #TIMER=ON TIMER=DETAIL # CONV_CHECK=ON: Convergence check is available on dispersive calc. # Else, convergence check is disabled. CONV_CHECK=ON # OUTPUT=NCDIO: Output is put into single NetCDF file for each domain/MPI processes. # DIROUT: GMT snapshot files are written into directories. # Else, original GMT output. #OUTPUT=DIROUT #OUTPUT=NCDIO # MULTI=ON: Multi-members on a job is supported. #MULTI=ON # SINGLE_TGS=ON: Station (tgs) output is written into single file per process. # This file can be split into files for each station by "splittgs.sh". #SINGLE_TGS=ON # CARTESIAN=ON: Cartesian axis is utilized. #CARTESIAN=ON # UPWIND3=ON: Difference scheme for advective term is changed into 3rd-order upwind # from original 1st-order upwind. #UPWIND3=ON # REAL_FFT=ON: Utilize real FFT for elastic loading calc. REAL_FFT=ON # SKIP_MAX_VEL=ON: Do not compute max velocity (saves time, most noticeably for # linear computation) #SKIP_MAX_VEL=ON # LESS_CC=ON: Convergence check on dispersive calc. is done only every 10 steps. #LESS_CC=ON ################################################################################ ################################################################################ ### DON'T CHANGE THE FOLLOWINGS!!!! ### ################################################################################ ################################################################################ ################################################################################ ### Parameters are processed here. ### ################################################################################ FFLAGS=$(BASE) $(OPT) -I$(NETCDF)/include # Precision ifeq ($(PREC),REAL_DBLE) FFLAGS+=-DREAL_DBLE else ifeq ($(PREC),DBLE_MATH) FFLAGS+=-DDBLE_MATH endif endif # MPI ifeq ($(MPI),ON) FFLAGS+=-DMPI -lmpi ifeq ($(CARTESIAN),ON) OBJS=mapproject.o okada.sub.o \ mod_multi.o \ mod_a2a3d.o mod_truncation.o mod_timer.o mod_mpi_fatal.o mod_grid.o mod_params.o mod_mpi.o mod_mygmt_gridio.o \ mod_fxy.o mod_fxy_cartesian.o mod_nest.o mod_interpolation.o mod_fxy_disp.o mod_fxy_disp_cartesian.o mod_hxy.o mod_hxy_cartesian.o \ mod_displacement.o mod_rwg.o \ mod_tgs.o mod_newsubs.o mod_ncdio.o mod_init_disp_gaussian.o mod_init_disp_sinwave.o mod_restart.o JAGURS.o else OBJS=mapproject.o okada.sub.o \ mod_multi.o \ mod_a2a3d.o mod_truncation.o mod_timer.o mod_mpi_fatal.o mod_grid.o mod_params.o mod_mpi.o mod_mygmt_gridio.o \ mod_fxy.o mod_fxy_cartesian.o mod_nest.o mod_interpolation.o mod_fxy_disp.o mod_fxy_disp_cartesian.o mod_hxy.o mod_hxy_cartesian.o \ mod_fxy_linear_Coriolis.o mod_fxy_linear_Coriolis_disp.o \ mod_density.o mod_displacement.o mod_loading.o mod_rwg.o \ mod_tgs.o mod_newsubs.o mod_ncdio.o mod_init_disp_gaussian.o mod_init_disp_sinwave.o mod_restart.o JAGURS.o endif ifeq ($(USE_ALLTOALLV),ON) FFLAGS+=-DUSE_ALLTOALLV ifeq ($(A2A3D),ON) FFLAGS+=-DA2A3D endif ifeq ($(SINGLE_A2A),ON) FFLAGS+=-DSINGLE_A2A endif endif else ifeq ($(CARTESIAN),ON) OBJS=mapproject.o okada.sub.o \ mod_multi.o \ mod_truncation.o mod_timer.o mod_grid.o mod_params.o mod_mygmt_gridio.o \ mod_fxy.o mod_fxy_cartesian.o mod_nest.o mod_interpolation.o mod_fxy_disp.o mod_fxy_disp_cartesian.o mod_hxy.o mod_hxy_cartesian.o \ mod_displacement.o mod_rwg.o \ mod_tgs.o mod_newsubs.o mod_ncdio.o mod_init_disp_gaussian.o mod_init_disp_sinwave.o mod_restart.o JAGURS.o else OBJS=mapproject.o okada.sub.o \ mod_multi.o \ mod_truncation.o mod_timer.o mod_grid.o mod_params.o mod_mygmt_gridio.o \ mod_fxy.o mod_fxy_cartesian.o mod_nest.o mod_interpolation.o mod_fxy_disp.o mod_fxy_disp_cartesian.o mod_hxy.o mod_hxy_cartesian.o \ mod_fxy_linear_Coriolis.o mod_fxy_linear_Coriolis_disp.o \ mod_density.o mod_displacement.o mod_loading.o mod_rwg.o \ mod_tgs.o mod_newsubs.o mod_ncdio.o mod_init_disp_gaussian.o mod_init_disp_sinwave.o mod_restart.o JAGURS.o endif endif # Timer ifeq ($(TIMER),DETAIL) FFLAGS+=-DTIMER -DTIMER_DETAIL else ifeq ($(TIMER),ON) FFLAGS+=-DTIMER endif endif # Convergence check ifeq ($(CONV_CHECK),ON) FFLAGS+=-DCONV_CHECK endif # File output ifeq ($(OUTPUT),NCDIO) FFLAGS+=-DNCDIO else ifeq ($(OUTPUT),DIROUT) FFLAGS+=-DDIROUT endif endif # Multi-members ifeq ($(MULTI),ON) ifeq ($(MPI),ON) FFLAGS+=-DMULTI else FFLAGS+=-DMULTI -lmpi endif endif # Single tgs output ifeq ($(SINGLE_TGS),ON) FFLAGS+=-DSINGLE_TGS endif # Cartesian axis ifeq ($(CARTESIAN),ON) FFLAGS+=-DCARTESIAN endif # 3rd-order upwind ifeq ($(UPWIND3),ON) FFLAGS+=-DUPWIND3 endif # Real FFT for elastic loading ifeq ($(REAL_FFT),ON) FFLAGS+=-DREAL_FFT endif # Skip max velocity computation ifeq ($(SKIP_MAX_VEL),ON) FFLAGS+=-DSKIP_MAX_VEL endif # Convergence check on dispersive calc. is done only every 10 steps. ifeq ($(LESS_CC),ON) FFLAGS+=-DLESS_CC endif ################################################################################ ### Make rules ### ################################################################################ $(EXEC): $(OBJS) $(FC) -o $@ $(FFLAGS) $^ $(LIBS) %.o: %.f90 $(FC) -c $(FFLAGS) $^ %.o: %.f $(FC) -c $(FFLAGS) $^ %.o: %.c $(CC) -c $(CFLAGS) $^ clean: rm -f *.o *.mod *__genmod.f90 $(EXEC)