source: flexpart.git/src/makefile @ fe118c0

10.4.1_peseibugfixes+enhancementsrelease-10.4.1scaling-bug
Last change on this file since fe118c0 was fe118c0, checked in by pesei <petra.seibert at univie.ac.at>, 4 years ago

Correct makefile w.r.t. netcdf yes/no and grib_api dependencies
Cosmetic correction on verttransform_ecmwf.f90

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