source: flexpart.git/src/makefile @ f3054ea

GFS_025dev
Last change on this file since f3054ea was f3054ea, checked in by Espen Sollum <eso@…>, 4 years ago

Changed from grib_api to eccodes. MPI: implemented linversionout=1; fixed calculation of grid_initial fields.

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