source: flexpart.git/src/makefile @ a9cf4b1

10.4.1_peseiGFS_025bugfixes+enhancementsdevrelease-10release-10.4.1scaling-bugunivie
Last change on this file since a9cf4b1 was a9cf4b1, checked in by Espen Sollum ATMOS <eso@…>, 6 years ago

Made enabling netCDF output during compilation optional

  • Property mode set to 100644
File size: 14.9 KB
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
53ifeq ($(gcc), 4.9)
54# Compiled libraries under user ~flexpart, gfortran v4.9
55        ROOT_DIR = /homevip/flexpart/
56
57        F90       = ${ROOT_DIR}/gcc-4.9.1/bin/gfortran
58        MPIF90    = ${ROOT_DIR}/bin/mpifort
59
60        INCPATH1  = ${ROOT_DIR}/gcc-4.9.1/include       
61        INCPATH2  = ${ROOT_DIR}/include
62        LIBPATH1 = ${ROOT_DIR}/lib
63else
64# Compiled libraries under user ~flexpart, gfortran v5.4
65        ROOT_DIR = /homevip/flexpart/
66
67        F90       = /usr/bin/gfortran
68        MPIF90    = /usr/bin/mpifort
69
70        INCPATH1  = ${ROOT_DIR}/gcc-5.4.0/include       
71        INCPATH2  = /usr/include
72        LIBPATH1 = ${ROOT_DIR}/gcc-5.4.0/lib
73endif
74
75
76### Enable netCDF output?
77ifeq ($(ncf), yes)
78        NCOPT = -DUSE_NCF -lnetcdff     
79else
80        NCOPT = -UUSE_NCF
81endif
82
83
84
85# path to gributils used to detect meteodata format
86VPATH = gributils/
87
88
89## OPTIMIZATION LEVEL
90O_LEV = 2 # [0,1,2,3,g,s,fast]
91O_LEV_DBG = g # [0,g]
92
93## LIBRARIES
94#LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper -lnetcdff
95LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper $(NCOPT)
96
97FFLAGS   = -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
98
99DBGFLAGS = -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
100
101LDFLAGS  = $(FFLAGS) -L$(LIBPATH1) -Wl,-rpath,$(LIBPATH1) $(LIBS) #-L$(LIBPATH2)
102LDDEBUG  = $(DBGFLAGS) -L$(LIBPATH1) $(LIBS) #-L$(LIBPATH2)
103
104MODOBJS = \
105par_mod.o               com_mod.o \
106conv_mod.o              hanna_mod.o \
107interpol_mod.o          cmapf_mod.o \
108unc_mod.o               oh_mod.o \
109xmass_mod.o             flux_mod.o \
110point_mod.o             outg_mod.o \
111mean_mod.o              random_mod.o \
112class_gribfile_mod.o
113
114MPI_MODOBJS = \
115mpi_mod.o
116
117## Serial versions (MPI version with same functionality and name '_mpi.f90' exists)
118OBJECTS_SERIAL = \
119        releaseparticles.o      partoutput.o \
120        conccalc.o \
121        init_domainfill.o       concoutput.o  \
122        timemanager.o FLEXPART.o        \
123        readpartpositions.o \
124        partoutput_short.o              \
125        concoutput_nest.o       \
126        boundcond_domainfill.o  \
127        redist.o                \
128        concoutput_surf.o       concoutput_surf_nest.o  \
129        getfields.o \
130        readwind_ecmwf.o
131
132## For MPI version
133OBJECTS_MPI = releaseparticles_mpi.o partoutput_mpi.o \
134        conccalc_mpi.o \
135        init_domainfill_mpi.o concoutput_mpi.o  \
136        timemanager_mpi.o FLEXPART_MPI.o        \
137        readpartpositions_mpi.o         \
138        partoutput_short_mpi.o          \
139        concoutput_nest_mpi.o           \
140        boundcond_domainfill_mpi.o      \
141        redist_mpi.o            \
142        concoutput_surf_mpi.o   concoutput_surf_nest_mpi.o      \
143        getfields_mpi.o \
144        readwind_ecmwf_mpi.o
145
146OBJECTS_NCF = netcdf_output_mod.o
147
148OBJECTS = \
149advance.o               initialize.o            \
150writeheader.o           writeheader_txt.o       \
151writeprecip.o \
152writeheader_surf.o      assignland.o\
153part0.o                 gethourlyOH.o\
154caldate.o               partdep.o \
155coordtrafo.o            psih.o \
156raerod.o                readcommand.o   \
157drydepokernel.o         readreceptors.o \
158erf.o                   readavailable.o \
159ew.o                    readreleases.o  \
160readdepo.o              get_vdep_prob.o   \
161get_wetscav.o           readwind_gfs.o \
162psim.o                  outgrid_init.o  \
163outgrid_init_nest.o     calcmatrix.o \
164photo_O1D.o             readlanduse.o \
165interpol_wind.o         readoutgrid.o \
166interpol_all.o          readpaths.o \
167getrb.o                 obukhov.o \
168getrc.o                 convmix.o \
169getvdep.o               readspecies.o \
170interpol_misslev.o      richardson.o \
171scalev.o                verttransform_ecmwf.o \
172pbl_profile.o           readOHfield.o \
173juldate.o               verttransform_gfs.o \
174interpol_vdep.o         interpol_rain.o \
175hanna.o                 wetdepokernel.o \
176calcpar.o               wetdepo.o \
177hanna_short.o           windalign.o \
178hanna1.o                gridcheck_ecmwf.o \
179gridcheck_gfs.o         gridcheck_nests.o \
180readwind_nests.o        calcpar_nests.o \
181verttransform_nests.o   interpol_all_nests.o \
182interpol_wind_nests.o   interpol_misslev_nests.o \
183interpol_vdep_nests.o   interpol_rain_nests.o \
184readageclasses.o        detectformat.o  \
185calcfluxes.o            fluxoutput.o \
186qvsat.o                 skplin.o \
187convect43c.o            \
188sort2.o                 distance.o \
189centerofmass.o          plumetraj.o \
190openouttraj.o           calcpv.o \
191calcpv_nests.o          distance2.o \
192clustering.o            interpol_wind_short.o \
193interpol_wind_short_nests.o shift_field_0.o \
194shift_field.o             \
195openreceptors.o         \
196readoutgrid_nest.o \
197writeheader_nest.o writeheader_nest_surf.o \
198wetdepokernel_nest.o \
199drydepokernel_nest.o    zenithangle.o \
200ohreaction.o            getvdep_nests.o \
201initial_cond_calc.o     initial_cond_output.o \
202dynamic_viscosity.o     get_settling.o  \
203initialize_cbl_vel.o    re_initialize_particle.o \
204cbl.o
205
206ifeq ($(ncf), yes)
207        OBJECTS := $(OBJECTS) $(OBJECTS_NCF)
208endif
209
210%.o: %.mod
211
212# serial executable
213serial: $(FLEXPART-SERIAL)
214serial: FC := $(F90)
215
216# parallel processing executable
217mpi: $(FLEXPART-MPI)
218mpi: FC := $(MPIF90)
219
220# parallel processing with debugging info
221mpi-dbg: $(FLEXPART-MPI-DBG)
222mpi-dbg: FFLAGS := $(DBGFLAGS)
223mpi-dbg: LDFLAGS:= $(LDDEBUG)
224mpi-dbg: FC := $(MPIF90)
225
226$(FLEXPART-SERIAL): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL)
227        +$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(LDFLAGS)
228
229$(FLEXPART-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
230        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
231        $(LDFLAGS)
232
233$(FLEXPART-MPI-DBG): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
234        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
235        $(LDFLAGS)
236
237%.o: %.f90
238        +$(FC) -c $(FFLAGS) $<
239
240clean:
241        \rm -f *.o *.mod
242
243cleanall:
244        \rm -f *.o *.mod $(FLEXPART-MPI) $(FLEXPART-MPI-DBG) $(FLEXPART-SERIAL)
245
246
247.SUFFIXES = $(SUFFIXES) .f90
248
249## DEPENDENCIES
250get_vdep_prob.o: cmapf_mod.o com_mod.o hanna_mod.o interpol_mod.o par_mod.o \
251        point_mod.o random_mod.o
252advance.o: cmapf_mod.o com_mod.o hanna_mod.o interpol_mod.o par_mod.o \
253        point_mod.o random_mod.o
254assignland.o: com_mod.o par_mod.o
255boundcond_domainfill.o: com_mod.o par_mod.o point_mod.o random_mod.o
256boundcond_domainfill_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
257        random_mod.o
258calcfluxes.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
259calcmatrix.o: com_mod.o conv_mod.o par_mod.o class_gribfile_mod.o
260calcpar.o: com_mod.o par_mod.o class_gribfile_mod.o
261calcpar_nests.o: com_mod.o par_mod.o
262calcpv.o: com_mod.o par_mod.o
263calcpv_nests.o: com_mod.o par_mod.o
264caldate.o: par_mod.o
265cbl.o: com_mod.o par_mod.o
266centerofmass.o: par_mod.o
267clustering.o: par_mod.o
268cmapf_mod.o: par_mod.o
269com_mod.o: par_mod.o
270conccalc.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
271conccalc_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o unc_mod.o
272concoutput.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
273concoutput_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
274        unc_mod.o mean_mod.o
275concoutput_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
276concoutput_nest_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
277        unc_mod.o mean_mod.o
278concoutput_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
279concoutput_surf_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
280        unc_mod.o mean_mod.o
281concoutput_surf_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
282concoutput_surf_nest_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o \
283        point_mod.o unc_mod.o mean_mod.o
284conv_mod.o: par_mod.o
285convect43c.o: conv_mod.o par_mod.o
286convmix.o: com_mod.o conv_mod.o flux_mod.o par_mod.o class_gribfile_mod.o
287coordtrafo.o: com_mod.o par_mod.o point_mod.o
288detectformat.o: com_mod.o par_mod.o class_gribfile_mod.o
289distance.o: par_mod.o
290distance2.o: par_mod.o
291drydepokernel.o: com_mod.o par_mod.o unc_mod.o
292drydepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
293erf.o: par_mod.o
294FLEXPART.o: com_mod.o conv_mod.o par_mod.o point_mod.o random_mod.o netcdf_output_mod.o class_gribfile_mod.o
295FLEXPART_MPI.o: com_mod.o conv_mod.o mpi_mod.o par_mod.o point_mod.o \
296        random_mod.o netcdf_output_mod.o class_gribfile_mod.o
297fluxoutput.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
298get_settling.o: com_mod.o par_mod.o
299getfields.o: com_mod.o par_mod.o class_gribfile_mod.o
300getfields_mpi.o: com_mod.o par_mod.o mpi_mod.o class_gribfile_mod.o
301gethourlyOH.o: com_mod.o oh_mod.o par_mod.o
302getrb.o: par_mod.o
303getrc.o: com_mod.o par_mod.o
304getvdep.o: com_mod.o par_mod.o
305getvdep_nests.o: com_mod.o par_mod.o
306gridcheck_ecmwf.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
307gridcheck_emos.o: com_mod.o conv_mod.o par_mod.o
308gridcheck_fnl.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
309gridcheck_gfs.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
310gridcheck_gfs_emos.o: com_mod.o conv_mod.o par_mod.o
311gridcheck_nests.o: com_mod.o par_mod.o
312gridcheck_nests_emos.o: com_mod.o par_mod.o
313gridcheck_orig_ecmwf.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
314hanna.o: com_mod.o hanna_mod.o par_mod.o
315hanna1.o: com_mod.o hanna_mod.o par_mod.o
316hanna_short.o: com_mod.o hanna_mod.o par_mod.o
317init_domainfill.o: com_mod.o par_mod.o point_mod.o random_mod.o
318init_domainfill_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
319        random_mod.o
320initial_cond_calc.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
321initial_cond_output.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
322initialize.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o random_mod.o
323initialize_cbl_vel.o: com_mod.o par_mod.o random_mod.o
324interpol_all.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
325interpol_all_nests.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
326interpol_misslev.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
327interpol_misslev_nests.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
328interpol_mod.o: par_mod.o
329interpol_rain.o: par_mod.o
330interpol_rain_nests.o: par_mod.o
331interpol_vdep.o: com_mod.o interpol_mod.o par_mod.o
332interpol_vdep_nests.o: com_mod.o interpol_mod.o par_mod.o
333interpol_wind.o: com_mod.o interpol_mod.o par_mod.o
334interpol_wind_nests.o: com_mod.o interpol_mod.o par_mod.o
335interpol_wind_short.o: com_mod.o interpol_mod.o par_mod.o
336interpol_wind_short_nests.o: com_mod.o interpol_mod.o par_mod.o
337juldate.o: par_mod.o
338mean_mod.o: par_mod.o
339mpi_mod.o: com_mod.o par_mod.o unc_mod.o
340netcdf_output_mod.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
341obukhov.o: par_mod.o class_gribfile_mod.o
342ohreaction.o: com_mod.o oh_mod.o par_mod.o
343openouttraj.o: com_mod.o par_mod.o point_mod.o
344openreceptors.o: com_mod.o par_mod.o
345outg_mod.o: par_mod.o
346outgrid_init.o: com_mod.o flux_mod.o oh_mod.o outg_mod.o par_mod.o unc_mod.o
347outgrid_init_nest.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
348part0.o: par_mod.o
349partdep.o: par_mod.o
350partoutput.o: com_mod.o par_mod.o
351partoutput_mpi.o: com_mod.o mpi_mod.o par_mod.o
352partoutput_short.o: com_mod.o par_mod.o
353partoutput_short_mpi.o: com_mod.o mpi_mod.o par_mod.o
354pbl_profile.o: par_mod.o
355plumetraj.o: com_mod.o par_mod.o point_mod.o mean_mod.o
356psih.o: par_mod.o
357psim.o: par_mod.o
358raerod.o: par_mod.o
359re_initialize_particle.o: com_mod.o par_mod.o
360readageclasses.o: com_mod.o par_mod.o
361readavailable.o: com_mod.o par_mod.o
362readcommand.o: com_mod.o par_mod.o
363readdepo.o: com_mod.o par_mod.o
364readlanduse.o: com_mod.o par_mod.o
365#readlanduse_int1.o: com_mod.o par_mod.o
366readOHfield.o: com_mod.o oh_mod.o par_mod.o
367readoutgrid.o: com_mod.o outg_mod.o par_mod.o
368readoutgrid_nest.o: com_mod.o outg_mod.o par_mod.o
369readpartpositions.o: com_mod.o par_mod.o random_mod.o
370readpartpositions_mpi.o: com_mod.o mpi_mod.o par_mod.o random_mod.o
371readpaths.o: com_mod.o par_mod.o
372readreceptors.o: com_mod.o par_mod.o
373readreleases.o: com_mod.o par_mod.o point_mod.o xmass_mod.o
374readspecies.o: com_mod.o par_mod.o
375readwind_ecmwf.o: com_mod.o par_mod.o
376readwind_emos.o: com_mod.o par_mod.o
377readwind_gfs.o: com_mod.o par_mod.o
378readwind_gfs_emos.o: com_mod.o par_mod.o
379readwind_ecmwf_mpi.o: com_mod.o mpi_mod.o par_mod.o
380readwind_nests.o: com_mod.o par_mod.o
381readwind_nests_emos.o: com_mod.o par_mod.o
382redist.o: com_mod.o conv_mod.o par_mod.o random_mod.o
383redist_mpi.o: com_mod.o conv_mod.o mpi_mod.o par_mod.o random_mod.o
384releaseparticles.o: com_mod.o par_mod.o point_mod.o random_mod.o \
385        xmass_mod.o
386releaseparticles_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
387        random_mod.o xmass_mod.o
388richardson.o: par_mod.o class_gribfile_mod.o
389scalev.o: par_mod.o
390shift_field.o: par_mod.o
391shift_field_0.o: par_mod.o
392timemanager.o: com_mod.o flux_mod.o netcdf_output_mod.o oh_mod.o outg_mod.o \
393        par_mod.o point_mod.o unc_mod.o xmass_mod.o
394timemanager_mpi.o: com_mod.o flux_mod.o mpi_mod.o oh_mod.o outg_mod.o \
395        par_mod.o point_mod.o unc_mod.o xmass_mod.o netcdf_output_mod.o
396unc_mod.o: par_mod.o
397verttransform_ecmwf.o: cmapf_mod.o com_mod.o par_mod.o
398verttransform_gfs.o: cmapf_mod.o com_mod.o par_mod.o
399verttransform_nests.o: com_mod.o par_mod.o
400get_wetscav.o: com_mod.o par_mod.o point_mod.o
401wetdepo.o: com_mod.o par_mod.o point_mod.o
402wetdepokernel.o: com_mod.o par_mod.o unc_mod.o
403wetdepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
404writeheader.o: com_mod.o outg_mod.o par_mod.o point_mod.o
405writeprecip.o: com_mod.o par_mod.o point_mod.o
406writeheader_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o
407writeheader_nest_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
408writeheader_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
409writeheader_txt.o: com_mod.o outg_mod.o par_mod.o point_mod.o
410zenithangle.o: par_mod.o
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG