Ticket #296: makefile

File makefile, 15.2 KB (added by craymond, 3 years ago)

makefile

Line 
1SHELL = /bin/bash
2################################################################################
3#  DESCRIPTION
4#    Makefile for FLEXPART. Standard (serial) and parallel (MPI) version
5#
6#    Dependencies are resolved in this makefile, so parallel make is
7#    possible ("make -j")
8#
9#    At NILU we have installed gcc-4.9.1 and libraries under user /homevip/flexpart
10#    ("ROOT_DIR")
11#    To use gfortran version 4.9, add "gcc=4.9" to the make command, e.g.
12#       'make -j ecmwf gcc=4.9',
13#    also set environment variable LD_LIBRARY_PATH to point to compiler libraries
14#
15#    Makefile was modified to produce unified executable for both ECMWF and GFS meteo data formats
16#    gributils were included to detect format of meteo data
17#
18#    Cpp directives USE_MPIINPLACE were added to three source files. The effect of these directives
19#    are to enable the MPI_IN_PLACE option only if compiled with a -DUSE_MPIINPLACE directive.
20#    Otherwise, a safer option (which requires the allocation of another array) is used by default.
21#    In makefile added the -x f95-cpp-input flag for compiling of cpp directives.
22#
23#  USAGE
24#    Compile serial FLEXPART
25#      make [-j] serial
26#
27#    Compile parallel FLEXPART
28#      make [-j] mpi
29#     
30#    Compile for debugging parallel FLEXPART
31#      make [-j] mpi-dbg
32#
33#  NETCDF OUTPUT
34#    To add support for output in netCDF format, append `ncf=yes` to the
35#    `make` command
36#
37################################################################################
38
39## PROGRAMS
40# Unified executable names
41# The same executable is used for both ECMWF and GFS metdata
42
43# Parallel processing executable
44FLEXPART-MPI = FLEXPART_MPI
45
46# Parallel processing executable with debugging info
47FLEXPART-MPI-DBG = DBG_FLEXPART_MPI
48
49# Serial processing executable
50FLEXPART-SERIAL = FLEXPART
51
52
53# Compiled libraries under user ~flexpart, gfortran v4.9
54#       ROOT_DIR = /homevip/flexpart/
55        ROOT_DIR = /Users/raymondc/LocallyInstalledSoftware/flexpart_v10.4_3d7eebf/
56
57#       F90       = ${ROOT_DIR}/gcc-4.9.1/bin/gfortran
58        F90       = /opt/local/bin/gfortran
59#       MPIF90    = ${ROOT_DIR}/bin/mpifort
60        MPIF90    = /opt/openmpi/bin/mpif90
61
62#       INCPATH1  = ${ROOT_DIR}/gcc-4.9.1/include       
63        INCPATH1  = /Users/raymondc/LocallyInstalledSoftware/eccodes_built/build/include
64#       INCPATH2  = ${ROOT_DIR}/include
65        INCPATH2 = /usr/local/include
66        LIBPATH1 = /Users/raymondc/LocallyInstalledSoftware/eccodes_built/build/lib
67        LIBPATH2 = /Users/raymondc/LocallyInstalledSoftware/jasper-1.900.1/src/libjasper
68
69
70
71### Enable netCDF output?
72ifeq ($(ncf), yes)
73        NCOPT = -DUSE_NCF -lnetcdff     
74else
75        NCOPT = -UUSE_NCF
76endif
77
78
79
80# path to gributils used to detect meteodata format
81VPATH = gributils/
82
83
84## OPTIMIZATION LEVEL
85O_LEV = 0 # [0,1,2,3,g,s,fast]
86O_LEV_DBG = g # [0,g]
87
88## LIBRARIES
89#LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper -lnetcdff
90LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper $(NCOPT)
91
92#FFLAGS   = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV) -g -cpp -m64 -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV) $(NCOPT) $(FUSER)  #-Warray-bounds -fcheck=all # -march=native
93
94FFLAGS   = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV) -g -cpp -m64 -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -O$(O_LEV) $(NCOPT) $(FUSER)  #-Warray-bounds -fcheck=all # -march=native
95
96
97DBGFLAGS = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV_DBG) -g3 -ggdb3 -cpp -m64 -mcmodel=medium -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
98
99LDFLAGS  = $(FFLAGS) -L$(LIBPATH1) -Wl,-rpath,$(LIBPATH1) $(LIBS) #-L$(LIBPATH2)
100LDDEBUG  = $(DBGFLAGS) -L$(LIBPATH1) $(LIBS) #-L$(LIBPATH2)
101
102MODOBJS = \
103par_mod.o               com_mod.o \
104conv_mod.o              hanna_mod.o \
105interpol_mod.o          cmapf_mod.o \
106unc_mod.o               oh_mod.o \
107xmass_mod.o             flux_mod.o \
108point_mod.o             outg_mod.o \
109mean_mod.o              random_mod.o \
110class_gribfile_mod.o
111
112MPI_MODOBJS = \
113mpi_mod.o
114
115## Serial versions (MPI version with same functionality and name '_mpi.f90' exists)
116OBJECTS_SERIAL = \
117        releaseparticles.o      partoutput.o \
118        partoutput_average.o \
119        conccalc.o \
120        init_domainfill.o       concoutput.o  \
121        timemanager.o FLEXPART.o        \
122        readpartpositions.o \
123        partoutput_short.o              \
124        concoutput_nest.o       \
125        boundcond_domainfill.o  \
126        redist.o                \
127        concoutput_surf.o       concoutput_surf_nest.o  \
128        concoutput_inversion_nest.o     \
129        concoutput_inversion.o \
130        getfields.o \
131        readwind_ecmwf.o
132
133## For MPI version
134OBJECTS_MPI = releaseparticles_mpi.o partoutput_mpi.o \
135        partoutput_average_mpi.o conccalc_mpi.o \
136        init_domainfill_mpi.o concoutput_mpi.o  \
137        timemanager_mpi.o FLEXPART_MPI.o        \
138        readpartpositions_mpi.o         \
139        partoutput_short_mpi.o          \
140        concoutput_nest_mpi.o           \
141        boundcond_domainfill_mpi.o      \
142        redist_mpi.o            \
143        concoutput_surf_mpi.o   concoutput_surf_nest_mpi.o      \
144        getfields_mpi.o \
145        readwind_ecmwf_mpi.o
146
147OBJECTS_NCF = netcdf_output_mod.o
148
149OBJECTS = \
150advance.o               initialize.o            \
151writeheader.o           writeheader_txt.o       \
152partpos_average.o       writeprecip.o \
153writeheader_surf.o      assignland.o\
154part0.o                 gethourlyOH.o\
155caldate.o               partdep.o \
156coordtrafo.o            psih.o \
157raerod.o                readcommand.o   \
158drydepokernel.o         readreceptors.o \
159erf.o                   readavailable.o \
160ew.o                    readreleases.o  \
161readdepo.o              get_vdep_prob.o   \
162get_wetscav.o           readwind_gfs.o \
163psim.o                  outgrid_init.o  \
164outgrid_init_nest.o     calcmatrix.o \
165photo_O1D.o             readlanduse.o \
166interpol_wind.o         readoutgrid.o \
167interpol_all.o          readpaths.o \
168getrb.o                 obukhov.o \
169getrc.o                 convmix.o \
170getvdep.o               readspecies.o \
171interpol_misslev.o      richardson.o \
172scalev.o                verttransform_ecmwf.o \
173pbl_profile.o           readOHfield.o \
174juldate.o               verttransform_gfs.o \
175interpol_vdep.o         interpol_rain.o \
176hanna.o                 wetdepokernel.o \
177calcpar.o               wetdepo.o \
178hanna_short.o           windalign.o \
179hanna1.o                gridcheck_ecmwf.o \
180gridcheck_gfs.o         gridcheck_nests.o \
181readwind_nests.o        calcpar_nests.o \
182verttransform_nests.o   interpol_all_nests.o \
183interpol_wind_nests.o   interpol_misslev_nests.o \
184interpol_vdep_nests.o   interpol_rain_nests.o \
185readageclasses.o        detectformat.o  \
186calcfluxes.o            fluxoutput.o \
187qvsat.o                 skplin.o \
188convect43c.o            \
189sort2.o                 distance.o \
190centerofmass.o          plumetraj.o \
191openouttraj.o           calcpv.o \
192calcpv_nests.o          distance2.o \
193clustering.o            interpol_wind_short.o \
194interpol_wind_short_nests.o shift_field_0.o \
195shift_field.o             \
196openreceptors.o         \
197readoutgrid_nest.o \
198writeheader_nest.o writeheader_nest_surf.o \
199wetdepokernel_nest.o \
200drydepokernel_nest.o    zenithangle.o \
201ohreaction.o            getvdep_nests.o \
202initial_cond_calc.o     initial_cond_output.o initial_cond_output_inversion.o \
203dynamic_viscosity.o     get_settling.o  \
204initialize_cbl_vel.o    re_initialize_particle.o \
205cbl.o
206
207ifeq ($(ncf), yes)
208        OBJECTS := $(OBJECTS) $(OBJECTS_NCF)
209endif
210
211%.o: %.mod
212
213# serial executable
214serial: $(FLEXPART-SERIAL)
215serial: FC := $(F90)
216
217# parallel processing executable
218mpi: $(FLEXPART-MPI)
219mpi: FC := $(MPIF90)
220
221# parallel processing with debugging info
222mpi-dbg: $(FLEXPART-MPI-DBG)
223mpi-dbg: FFLAGS := $(DBGFLAGS)
224mpi-dbg: LDFLAGS:= $(LDDEBUG)
225mpi-dbg: FC := $(MPIF90)
226
227$(FLEXPART-SERIAL): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL)
228        +$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(LDFLAGS)
229
230$(FLEXPART-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
231        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
232        $(LDFLAGS)
233
234$(FLEXPART-MPI-DBG): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
235        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
236        $(LDFLAGS)
237
238%.o: %.f90
239        +$(FC) -c $(FFLAGS) $<
240
241clean:
242        \rm -f *.o *.mod
243
244cleanall:
245        \rm -f *.o *.mod $(FLEXPART-MPI) $(FLEXPART-MPI-DBG) $(FLEXPART-SERIAL)
246
247
248.SUFFIXES = $(SUFFIXES) .f90
249
250## DEPENDENCIES
251advance.o: cmapf_mod.o com_mod.o hanna_mod.o interpol_mod.o par_mod.o \
252        point_mod.o random_mod.o
253assignland.o: com_mod.o par_mod.o
254boundcond_domainfill.o: com_mod.o par_mod.o point_mod.o random_mod.o
255boundcond_domainfill_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
256        random_mod.o
257calcfluxes.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
258calcmatrix.o: com_mod.o conv_mod.o par_mod.o
259calcpar.o: com_mod.o par_mod.o
260calcpar_nests.o: com_mod.o par_mod.o
261calcpv.o: com_mod.o par_mod.o
262calcpv_nests.o: com_mod.o par_mod.o
263caldate.o: par_mod.o
264cbl.o: com_mod.o par_mod.o
265centerofmass.o: par_mod.o
266clustering.o: par_mod.o
267cmapf_mod.o: par_mod.o
268com_mod.o: par_mod.o
269conccalc.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
270conccalc_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o unc_mod.o
271concoutput.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
272concoutput_inversion.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o \
273        unc_mod.o
274concoutput_inversion_nest.o: com_mod.o mean_mod.o outg_mod.o par_mod.o \
275        point_mod.o unc_mod.o
276concoutput_mpi.o: com_mod.o mean_mod.o mpi_mod.o outg_mod.o par_mod.o \
277        point_mod.o unc_mod.o
278concoutput_nest.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o \
279        unc_mod.o
280concoutput_nest_mpi.o: com_mod.o mean_mod.o mpi_mod.o outg_mod.o par_mod.o \
281        point_mod.o unc_mod.o
282concoutput_surf.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o \
283        unc_mod.o
284concoutput_surf_mpi.o: com_mod.o mean_mod.o mpi_mod.o outg_mod.o par_mod.o \
285        point_mod.o unc_mod.o
286concoutput_surf_nest.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o \
287        unc_mod.o
288concoutput_surf_nest_mpi.o: com_mod.o mean_mod.o mpi_mod.o outg_mod.o \
289        par_mod.o point_mod.o unc_mod.o
290conv_mod.o: par_mod.o
291convect43c.o: conv_mod.o par_mod.o
292convmix.o: com_mod.o conv_mod.o flux_mod.o par_mod.o
293coordtrafo.o: com_mod.o par_mod.o point_mod.o
294detectformat.o: com_mod.o par_mod.o
295distance.o: par_mod.o
296distance2.o: par_mod.o
297drydepokernel.o: com_mod.o par_mod.o unc_mod.o
298drydepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
299erf.o: par_mod.o
300FLEXPART.o: com_mod.o conv_mod.o netcdf_output_mod.o par_mod.o point_mod.o \
301        random_mod.o
302FLEXPART_MPI.o: com_mod.o conv_mod.o mpi_mod.o netcdf_output_mod.o par_mod.o \
303        point_mod.o random_mod.o
304fluxoutput.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
305get_settling.o: com_mod.o par_mod.o
306get_vdep_prob.o: com_mod.o interpol_mod.o par_mod.o point_mod.o
307get_wetscav.o: com_mod.o par_mod.o point_mod.o
308getfields.o: com_mod.o par_mod.o
309getfields_mpi.o: com_mod.o mpi_mod.o par_mod.o
310gethourlyOH.o: com_mod.o oh_mod.o par_mod.o
311getrb.o: par_mod.o
312getrc.o: com_mod.o par_mod.o
313getvdep.o: com_mod.o par_mod.o
314getvdep_nests.o: com_mod.o par_mod.o
315grib2check.o: com_mod.o par_mod.o
316gridcheck_ecmwf.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
317gridcheck_gfs.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
318gridcheck_nests.o: com_mod.o par_mod.o
319hanna.o: com_mod.o hanna_mod.o par_mod.o
320hanna1.o: com_mod.o hanna_mod.o par_mod.o
321hanna_short.o: com_mod.o hanna_mod.o par_mod.o
322init_domainfill.o: com_mod.o par_mod.o point_mod.o random_mod.o
323init_domainfill_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o random_mod.o
324initial_cond_calc.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
325initial_cond_output.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
326initial_cond_output_inversion.o: com_mod.o outg_mod.o par_mod.o point_mod.o \
327        unc_mod.o
328initialize.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o random_mod.o
329initialize_cbl_vel.o: com_mod.o par_mod.o random_mod.o
330interpol_all.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
331interpol_all_nests.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
332interpol_misslev.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
333interpol_misslev_nests.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
334interpol_mod.o: par_mod.o
335interpol_rain.o: par_mod.o
336interpol_rain_nests.o: par_mod.o
337interpol_vdep.o: com_mod.o interpol_mod.o par_mod.o
338interpol_vdep_nests.o: com_mod.o interpol_mod.o par_mod.o
339interpol_wind.o: com_mod.o interpol_mod.o par_mod.o
340interpol_wind_nests.o: com_mod.o interpol_mod.o par_mod.o
341interpol_wind_short.o: com_mod.o interpol_mod.o par_mod.o
342interpol_wind_short_nests.o: com_mod.o interpol_mod.o par_mod.o
343juldate.o: par_mod.o
344mean_mod.o: par_mod.o
345mpi_mod.o: com_mod.o par_mod.o unc_mod.o
346netcdf_output_mod.o: com_mod.o mean_mod.o outg_mod.o par_mod.o point_mod.o \
347        unc_mod.o
348obukhov.o: par_mod.o
349ohreaction.o: com_mod.o oh_mod.o par_mod.o
350openouttraj.o: com_mod.o par_mod.o point_mod.o
351openreceptors.o: com_mod.o par_mod.o
352outg_mod.o: par_mod.o
353outgrid_init.o: com_mod.o flux_mod.o oh_mod.o outg_mod.o par_mod.o unc_mod.o
354outgrid_init_nest.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
355part0.o: par_mod.o
356partdep.o: com_mod.o par_mod.o
357partoutput.o: com_mod.o par_mod.o
358partoutput_average.o: com_mod.o par_mod.o
359partoutput_average_mpi.o: com_mod.o mpi_mod.o par_mod.o
360partoutput_mpi.o: com_mod.o mpi_mod.o par_mod.o
361partoutput_short.o: com_mod.o par_mod.o
362partoutput_short_mpi.o: com_mod.o mpi_mod.o par_mod.o
363partpos_average.o: com_mod.o par_mod.o
364pbl_profile.o: par_mod.o
365plumetraj.o: com_mod.o mean_mod.o par_mod.o point_mod.o
366psih.o: par_mod.o
367psim.o: par_mod.o
368raerod.o: par_mod.o
369re_initialize_particle.o: com_mod.o par_mod.o
370readageclasses.o: com_mod.o par_mod.o
371readavailable.o: com_mod.o par_mod.o
372readcommand.o: com_mod.o par_mod.o
373readdepo.o: com_mod.o par_mod.o
374readlanduse.o: com_mod.o par_mod.o
375readOHfield.o: com_mod.o oh_mod.o par_mod.o
376readoutgrid.o: com_mod.o outg_mod.o par_mod.o
377readoutgrid_nest.o: com_mod.o outg_mod.o par_mod.o
378readpartpositions.o: com_mod.o par_mod.o random_mod.o
379readpartpositions_mpi.o: com_mod.o mpi_mod.o par_mod.o random_mod.o
380readpaths.o: com_mod.o par_mod.o
381readreceptors.o: com_mod.o par_mod.o
382readreleases.o: com_mod.o par_mod.o point_mod.o xmass_mod.o
383readspecies.o: com_mod.o par_mod.o
384readwind_ecmwf.o: com_mod.o par_mod.o
385readwind_ecmwf_mpi.o: com_mod.o mpi_mod.o par_mod.o
386readwind_emos.o: com_mod.o par_mod.o
387readwind_gfs.o: com_mod.o par_mod.o
388readwind_nests.o: com_mod.o par_mod.o
389redist.o: com_mod.o conv_mod.o par_mod.o random_mod.o
390redist_mpi.o: com_mod.o conv_mod.o mpi_mod.o par_mod.o random_mod.o
391releaseparticles.o: com_mod.o par_mod.o point_mod.o random_mod.o xmass_mod.o
392releaseparticles_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
393        random_mod.o xmass_mod.o
394richardson.o: par_mod.o
395scalev.o: par_mod.o
396shift_field.o: par_mod.o
397shift_field_0.o: par_mod.o
398timemanager.o: com_mod.o flux_mod.o netcdf_output_mod.o oh_mod.o outg_mod.o \
399        par_mod.o point_mod.o unc_mod.o xmass_mod.o
400timemanager_mpi.o: com_mod.o flux_mod.o mpi_mod.o netcdf_output_mod.o \
401        oh_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o xmass_mod.o
402unc_mod.o: par_mod.o
403verttransform_ecmwf.o: cmapf_mod.o com_mod.o par_mod.o
404verttransform_gfs.o: cmapf_mod.o com_mod.o par_mod.o
405verttransform_nests.o: com_mod.o par_mod.o
406wetdepo.o: com_mod.o par_mod.o point_mod.o
407wetdepokernel.o: com_mod.o par_mod.o unc_mod.o
408wetdepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
409writeheader.o: com_mod.o outg_mod.o par_mod.o point_mod.o
410writeheader_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o
411writeheader_nest_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
412writeheader_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
413writeheader_txt.o: com_mod.o outg_mod.o par_mod.o point_mod.o
414writeprecip.o: com_mod.o par_mod.o point_mod.o
415zenithangle.o: par_mod.o
hosted by ZAMG