Skip to content
Snippets Groups Projects
Commit e589f258 authored by Marina Dütsch's avatar Marina Dütsch
Browse files

add makefile for vsc4 (gfortran)

parent 778b9f2f
Branches
Tags
No related merge requests found
SHELL = /bin/bash
################################################################################
# DESCRIPTION
# Makefile for FLEXPART. Standard (serial) and parallel (MPI) version
#
# Dependencies are resolved in this makefile, so parallel make is
# possible ("make -j")
#
# At NILU we have installed gcc-4.9.1 and libraries under user /homevip/flexpart
# ("ROOT_DIR")
# To use gfortran version 4.9, add "gcc=4.9" to the make command, e.g.
# 'make -j ecmwf gcc=4.9',
# also set environment variable LD_LIBRARY_PATH to point to compiler libraries
#
# Makefile was modified to produce unified executable for both ECMWF and GFS meteo data formats
# gributils were included to detect format of meteo data
#
# Cpp directives USE_MPIINPLACE were added to three source files. The effect of these directives
# are to enable the MPI_IN_PLACE option only if compiled with a -DUSE_MPIINPLACE directive.
# Otherwise, a safer option (which requires the allocation of another array) is used by default.
# In makefile added the -x f95-cpp-input flag for compiling of cpp directives.
#
# USAGE
# Compile serial FLEXPART
# make [-j] serial
#
# Compile parallel FLEXPART
# make [-j] mpi
#
# Compile for debugging parallel FLEXPART
# make [-j] mpi-dbg
#
# NETCDF OUTPUT
# To add support for output in netCDF format, append `ncf=yes` to the
# `make` command
#
################################################################################
## PROGRAMS
# Unified executable names
# The same executable is used for both ECMWF and GFS metdata
# Parallel processing executable
FLEXPART-MPI = FLEXPART_MPI
# Parallel processing executable with debugging info
FLEXPART-MPI-DBG = DBG_FLEXPART_MPI
# Serial processing executable
FLEXPART-SERIAL = FLEXPART
ifeq ($(gcc), 4.9)
# Compiled libraries under user ~flexpart, gfortran v4.9
ROOT_DIR = /homevip/flexpart/
F90 = ${ROOT_DIR}/gcc-4.9.1/bin/gfortran
MPIF90 = ${ROOT_DIR}/bin/mpifort
INCPATH1 = ${ROOT_DIR}/gcc-4.9.1/include
INCPATH2 = ${ROOT_DIR}/include
LIBPATH1 = ${ROOT_DIR}/lib
else
# Compiled libraries under user ~flexpart, gfortran v5.4
#ROOT_DIR = /homevip/flexpart/
ROOT_DIR = . #MD
#F90 = /usr/bin/gfortran
F90 = /opt/sw/spack-0.12.1/opt/spack/linux-centos7-x86_64/gcc-9.1.0/gcc-9.3.0-dbq7v4mzjioqwhz2abknk7los3jgzolq/bin/gfortran
#MPIF90 = /usr/bin/mpifort
MPIF90 = /opt/sw/spack-0.12.1/opt/spack/linux-centos7-x86_64/gcc-9.1.0/openmpi-3.1.4-fdssbx5me7tmknsqqylmjemtyops4cqq/bin/mpifort
#INCPATH1 = ${ROOT_DIR}/gcc-5.4.0/include
#INCPATH2 = /usr/include
#LIBPATH1 = ${ROOT_DIR}/gcc-5.4.0/lib
#MD for vsc4
INCPATH1 = /opt/sw/spack-0.12.1/opt/spack/linux-centos7-x86_64/gcc-9.1.0/eccodes-2.13.0-cttsf5zpaptvvdoxhd2fj7egtk76c7dh/include
INCPATH2 = /opt/sw/spack-0.12.1/opt/spack/linux-centos7-x86_64/gcc-9.1.0/netcdf-fortran-4.4.5-rrbh4ue26zvuuwaizt35hprgyyyhcof7/include
LIBPATH1 = /opt/sw/spack-0.12.1/opt/spack/linux-centos7-x86_64/gcc-9.1.0/eccodes-2.13.0-cttsf5zpaptvvdoxhd2fj7egtk76c7dh/lib
LIBPATH2 = /opt/sw/spack-0.12.1/opt/spack/linux-centos7-x86_64/gcc-9.1.0/netcdf-fortran-4.4.5-rrbh4ue26zvuuwaizt35hprgyyyhcof7/lib
endif
### Enable netCDF output?
ifeq ($(ncf), yes)
NCOPT = -DUSE_NCF -lnetcdff
else
NCOPT = -UUSE_NCF
endif
# path to gributils used to detect meteodata format
VPATH = gributils/
## OPTIMIZATION LEVEL
O_LEV = 0 # [0,1,2,3,g,s,fast]
O_LEV_DBG = g # [0,g]
## LIBRARIES
#LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper -lnetcdff
#LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper $(NCOPT)
#LIBS = -leccodes -leccodes_f90 -lm -ljasper $(NCOPT) #MD
LIBS = -leccodes -leccodes_f90 -lm $(NCOPT) #MD
FFLAGS = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV) -g -cpp -m64 -mcmodel=large -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV) $(NCOPT) $(FUSER) #-Warray-bounds -fcheck=all # -march=native
DBGFLAGS = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV_DBG) -g3 -ggdb3 -cpp -m64 -mcmodel=large -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV_DBG) $(NCOPT) -fbacktrace -Wall -fdump-core $(FUSER) # -ffpe-trap=invalid,overflow,denormal,underflow,zero -Warray-bounds -fcheck=all
LDFLAGS = $(FFLAGS) -L$(LIBPATH1) -Wl,-rpath,$(LIBPATH1) $(LIBS) -L$(LIBPATH2) -Wl,-rpath,$(LIBPATH2) #MD add LIBPATH2 as rpath (for dynamic libraries)
LDDEBUG = $(DBGFLAGS) -L$(LIBPATH1) $(LIBS) -L$(LIBPATH2)
MODOBJS = \
par_mod.o com_mod.o \
conv_mod.o hanna_mod.o \
interpol_mod.o cmapf_mod.o \
unc_mod.o oh_mod.o \
xmass_mod.o flux_mod.o \
point_mod.o outg_mod.o \
mean_mod.o random_mod.o \
class_gribfile_mod.o
MPI_MODOBJS = \
mpi_mod.o
## Serial versions (MPI version with same functionality and name '_mpi.f90' exists)
OBJECTS_SERIAL = \
releaseparticles.o partoutput.o \
partoutput_average.o \
conccalc.o \
init_domainfill.o concoutput.o \
timemanager.o FLEXPART.o \
readpartpositions.o \
partoutput_short.o \
concoutput_nest.o \
boundcond_domainfill.o \
redist.o \
concoutput_surf.o concoutput_surf_nest.o \
concoutput_inversion_nest.o \
concoutput_inversion.o \
getfields.o \
readwind_ecmwf.o
## For MPI version
OBJECTS_MPI = releaseparticles_mpi.o partoutput_mpi.o \
partoutput_average_mpi.o conccalc_mpi.o \
init_domainfill_mpi.o concoutput_mpi.o \
timemanager_mpi.o FLEXPART_MPI.o \
readpartpositions_mpi.o \
partoutput_short_mpi.o \
concoutput_nest_mpi.o \
boundcond_domainfill_mpi.o \
redist_mpi.o \
concoutput_surf_mpi.o concoutput_surf_nest_mpi.o \
getfields_mpi.o \
readwind_ecmwf_mpi.o
OBJECTS_NCF = netcdf_output_mod.o
OBJECTS = \
advance.o initialize.o \
writeheader.o writeheader_txt.o \
partpos_average.o writeprecip.o \
writeheader_surf.o assignland.o\
part0.o gethourlyOH.o\
caldate.o partdep.o \
coordtrafo.o psih.o \
raerod.o readcommand.o \
drydepokernel.o readreceptors.o \
erf.o readavailable.o \
ew.o readreleases.o \
readdepo.o get_vdep_prob.o \
get_wetscav.o readwind_gfs.o \
psim.o outgrid_init.o \
outgrid_init_nest.o calcmatrix.o \
photo_O1D.o readlanduse.o \
interpol_wind.o readoutgrid.o \
interpol_all.o readpaths.o \
getrb.o obukhov.o \
getrc.o convmix.o \
getvdep.o readspecies.o \
interpol_misslev.o richardson.o \
scalev.o verttransform_ecmwf.o \
pbl_profile.o readOHfield.o \
juldate.o verttransform_gfs.o \
interpol_vdep.o interpol_rain.o \
hanna.o wetdepokernel.o \
calcpar.o wetdepo.o \
hanna_short.o windalign.o \
hanna1.o gridcheck_ecmwf.o \
gridcheck_gfs.o gridcheck_nests.o \
readwind_nests.o calcpar_nests.o \
verttransform_nests.o interpol_all_nests.o \
interpol_wind_nests.o interpol_misslev_nests.o \
interpol_vdep_nests.o interpol_rain_nests.o \
readageclasses.o detectformat.o \
calcfluxes.o fluxoutput.o \
qvsat.o skplin.o \
convect43c.o \
sort2.o distance.o \
centerofmass.o plumetraj.o \
openouttraj.o calcpv.o \
calcpv_nests.o distance2.o \
clustering.o interpol_wind_short.o \
interpol_wind_short_nests.o shift_field_0.o \
shift_field.o \
openreceptors.o \
readoutgrid_nest.o \
writeheader_nest.o writeheader_nest_surf.o \
wetdepokernel_nest.o \
drydepokernel_nest.o zenithangle.o \
ohreaction.o getvdep_nests.o \
initial_cond_calc.o initial_cond_output.o initial_cond_output_inversion.o \
dynamic_viscosity.o get_settling.o \
initialize_cbl_vel.o re_initialize_particle.o \
cbl.o
ifeq ($(ncf), yes)
OBJECTS := $(OBJECTS) $(OBJECTS_NCF)
endif
%.o: %.mod
# serial executable
serial: $(FLEXPART-SERIAL)
serial: FC := $(F90)
# parallel processing executable
mpi: $(FLEXPART-MPI)
mpi: FC := $(MPIF90)
# parallel processing with debugging info
mpi-dbg: $(FLEXPART-MPI-DBG)
mpi-dbg: FFLAGS := $(DBGFLAGS)
mpi-dbg: LDFLAGS:= $(LDDEBUG)
mpi-dbg: FC := $(MPIF90)
$(FLEXPART-SERIAL): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL)
+$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(LDFLAGS)
$(FLEXPART-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
+$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
$(LDFLAGS)
$(FLEXPART-MPI-DBG): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
+$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
$(LDFLAGS)
%.o: %.f90
+$(FC) -c $(FFLAGS) $<
clean:
\rm -f *.o *.mod
cleanall:
\rm -f *.o *.mod $(FLEXPART-MPI) $(FLEXPART-MPI-DBG) $(FLEXPART-SERIAL)
.SUFFIXES = $(SUFFIXES) .f90
## DEPENDENCIES
advance.o: cmapf_mod.o com_mod.o hanna_mod.o interpol_mod.o par_mod.o \
point_mod.o random_mod.o
assignland.o: com_mod.o par_mod.o
boundcond_domainfill.o: com_mod.o par_mod.o point_mod.o random_mod.o
boundcond_domainfill_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
random_mod.o
calcfluxes.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
calcmatrix.o: com_mod.o conv_mod.o par_mod.o
calcpar.o: com_mod.o par_mod.o
calcpar_nests.o: com_mod.o par_mod.o
calcpv.o: com_mod.o par_mod.o
calcpv_nests.o: com_mod.o par_mod.o
caldate.o: par_mod.o
cbl.o: com_mod.o par_mod.o
centerofmass.o: par_mod.o
clustering.o: par_mod.o
cmapf_mod.o: par_mod.o
com_mod.o: par_mod.o
conccalc.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
conccalc_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o unc_mod.o
concoutput.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
concoutput_inversion.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o \
unc_mod.o
concoutput_inversion_nest.o: com_mod.o mean_mod.o outg_mod.o par_mod.o \
point_mod.o unc_mod.o
concoutput_mpi.o: com_mod.o mean_mod.o mpi_mod.o outg_mod.o par_mod.o \
point_mod.o unc_mod.o
concoutput_nest.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o \
unc_mod.o
concoutput_nest_mpi.o: com_mod.o mean_mod.o mpi_mod.o outg_mod.o par_mod.o \
point_mod.o unc_mod.o
concoutput_surf.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o \
unc_mod.o
concoutput_surf_mpi.o: com_mod.o mean_mod.o mpi_mod.o outg_mod.o par_mod.o \
point_mod.o unc_mod.o
concoutput_surf_nest.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o \
unc_mod.o
concoutput_surf_nest_mpi.o: com_mod.o mean_mod.o mpi_mod.o outg_mod.o \
par_mod.o point_mod.o unc_mod.o
conv_mod.o: par_mod.o
convect43c.o: conv_mod.o par_mod.o
convmix.o: com_mod.o conv_mod.o flux_mod.o par_mod.o
coordtrafo.o: com_mod.o par_mod.o point_mod.o
detectformat.o: com_mod.o par_mod.o
distance.o: par_mod.o
distance2.o: par_mod.o
drydepokernel.o: com_mod.o par_mod.o unc_mod.o
drydepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
erf.o: par_mod.o
FLEXPART.o: com_mod.o conv_mod.o netcdf_output_mod.o par_mod.o point_mod.o \
random_mod.o
FLEXPART_MPI.o: com_mod.o conv_mod.o mpi_mod.o netcdf_output_mod.o par_mod.o \
point_mod.o random_mod.o
fluxoutput.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
get_settling.o: com_mod.o par_mod.o
get_vdep_prob.o: com_mod.o interpol_mod.o par_mod.o point_mod.o
get_wetscav.o: com_mod.o par_mod.o point_mod.o
getfields.o: com_mod.o par_mod.o
getfields_mpi.o: com_mod.o mpi_mod.o par_mod.o
gethourlyOH.o: com_mod.o oh_mod.o par_mod.o
getrb.o: par_mod.o
getrc.o: com_mod.o par_mod.o
getvdep.o: com_mod.o par_mod.o
getvdep_nests.o: com_mod.o par_mod.o
grib2check.o: com_mod.o par_mod.o
gridcheck_ecmwf.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
gridcheck_gfs.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
gridcheck_nests.o: com_mod.o par_mod.o
hanna.o: com_mod.o hanna_mod.o par_mod.o
hanna1.o: com_mod.o hanna_mod.o par_mod.o
hanna_short.o: com_mod.o hanna_mod.o par_mod.o
init_domainfill.o: com_mod.o par_mod.o point_mod.o random_mod.o
init_domainfill_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o random_mod.o
initial_cond_calc.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
initial_cond_output.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
initial_cond_output_inversion.o: com_mod.o outg_mod.o par_mod.o point_mod.o \
unc_mod.o
initialize.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o random_mod.o
initialize_cbl_vel.o: com_mod.o par_mod.o random_mod.o
interpol_all.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
interpol_all_nests.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
interpol_misslev.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
interpol_misslev_nests.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
interpol_mod.o: par_mod.o
interpol_rain.o: par_mod.o
interpol_rain_nests.o: par_mod.o
interpol_vdep.o: com_mod.o interpol_mod.o par_mod.o
interpol_vdep_nests.o: com_mod.o interpol_mod.o par_mod.o
interpol_wind.o: com_mod.o interpol_mod.o par_mod.o
interpol_wind_nests.o: com_mod.o interpol_mod.o par_mod.o
interpol_wind_short.o: com_mod.o interpol_mod.o par_mod.o
interpol_wind_short_nests.o: com_mod.o interpol_mod.o par_mod.o
juldate.o: par_mod.o
mean_mod.o: par_mod.o
mpi_mod.o: com_mod.o par_mod.o unc_mod.o
netcdf_output_mod.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o \
unc_mod.o
obukhov.o: par_mod.o
ohreaction.o: com_mod.o oh_mod.o par_mod.o
openouttraj.o: com_mod.o par_mod.o point_mod.o
openreceptors.o: com_mod.o par_mod.o
outg_mod.o: par_mod.o
outgrid_init.o: com_mod.o flux_mod.o oh_mod.o outg_mod.o par_mod.o unc_mod.o
outgrid_init_nest.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
part0.o: par_mod.o
partdep.o: com_mod.o par_mod.o
partoutput.o: com_mod.o par_mod.o
partoutput_average.o: com_mod.o par_mod.o
partoutput_average_mpi.o: com_mod.o mpi_mod.o par_mod.o
partoutput_mpi.o: com_mod.o mpi_mod.o par_mod.o
partoutput_short.o: com_mod.o par_mod.o
partoutput_short_mpi.o: com_mod.o mpi_mod.o par_mod.o
partpos_average.o: com_mod.o par_mod.o
pbl_profile.o: par_mod.o
plumetraj.o: com_mod.o mean_mod.o par_mod.o point_mod.o
psih.o: par_mod.o
psim.o: par_mod.o
raerod.o: par_mod.o
re_initialize_particle.o: com_mod.o par_mod.o
readageclasses.o: com_mod.o par_mod.o
readavailable.o: com_mod.o par_mod.o
readcommand.o: com_mod.o par_mod.o
readdepo.o: com_mod.o par_mod.o
readlanduse.o: com_mod.o par_mod.o
readOHfield.o: com_mod.o oh_mod.o par_mod.o
readoutgrid.o: com_mod.o outg_mod.o par_mod.o
readoutgrid_nest.o: com_mod.o outg_mod.o par_mod.o
readpartpositions.o: com_mod.o par_mod.o random_mod.o
readpartpositions_mpi.o: com_mod.o mpi_mod.o par_mod.o random_mod.o
readpaths.o: com_mod.o par_mod.o
readreceptors.o: com_mod.o par_mod.o
readreleases.o: com_mod.o par_mod.o point_mod.o xmass_mod.o
readspecies.o: com_mod.o par_mod.o
readwind_ecmwf.o: com_mod.o par_mod.o
readwind_ecmwf_mpi.o: com_mod.o mpi_mod.o par_mod.o
readwind_emos.o: com_mod.o par_mod.o
readwind_gfs.o: com_mod.o par_mod.o
readwind_nests.o: com_mod.o par_mod.o
redist.o: com_mod.o conv_mod.o par_mod.o random_mod.o
redist_mpi.o: com_mod.o conv_mod.o mpi_mod.o par_mod.o random_mod.o
releaseparticles.o: com_mod.o par_mod.o point_mod.o random_mod.o xmass_mod.o
releaseparticles_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
random_mod.o xmass_mod.o
richardson.o: par_mod.o
scalev.o: par_mod.o
shift_field.o: par_mod.o
shift_field_0.o: par_mod.o
timemanager.o: com_mod.o flux_mod.o netcdf_output_mod.o oh_mod.o outg_mod.o \
par_mod.o point_mod.o unc_mod.o xmass_mod.o
timemanager_mpi.o: com_mod.o flux_mod.o mpi_mod.o netcdf_output_mod.o \
oh_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o xmass_mod.o
unc_mod.o: par_mod.o
verttransform_ecmwf.o: cmapf_mod.o com_mod.o par_mod.o
verttransform_gfs.o: cmapf_mod.o com_mod.o par_mod.o
verttransform_nests.o: com_mod.o par_mod.o
wetdepo.o: com_mod.o par_mod.o point_mod.o
wetdepokernel.o: com_mod.o par_mod.o unc_mod.o
wetdepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
writeheader.o: com_mod.o outg_mod.o par_mod.o point_mod.o
writeheader_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o
writeheader_nest_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
writeheader_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
writeheader_txt.o: com_mod.o outg_mod.o par_mod.o point_mod.o
writeprecip.o: com_mod.o par_mod.o point_mod.o
zenithangle.o: par_mod.o
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment