source: flexpart.git/src/makefile @ 6b22af9

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

Local branch for espen, working with OpenMP version of readwind

  • Property mode set to 100644
File size: 15.0 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_FLAGS=
14#
15#  USAGE
16#    Compile serial FLEXPART (ECMWF)
17#      make [-j] ecmwf
18#
19#    Compile parallel FLEXPART (ECMWF)
20#      make [-j] ecmwf-mpi
21#     
22#    Compile for debugging parallel FLEXPART (ECMWF)
23#      make [-j] ecmwf-mpi-dbg
24#
25#    Compile serial FLEXPART (GFS)
26#      make [-j] gfs
27#
28#    Compile parallel FLEXPART (GFS)
29#      make [-j] gfs-mpi
30#
31################################################################################
32
33## PROGRAMS
34FLEXPART-ECMWF-MPI      = FP_ecmwf_MPI
35FLEXPART-ECMWF-MPI-DBG  = DBG_FP_ecmwf_MPI
36FLEXPART-ECMWF          = FP_ecmwf_gfortran
37FLEXPART-GFS            = FP_gfs_gfortran
38FLEXPART-GFS-MPI        = FP_gfs_MPI
39
40ifeq ($(gcc), 4.9)
41# Compiled libraries under users ~flexpart (or ~espen), gfortran v4.9
42        ROOT_DIR = /homevip/flexpart/
43#       ROOT_DIR = /homevip/espen/
44
45        F90       = ${ROOT_DIR}/gcc-4.9.1/bin/gfortran
46        MPIF90    = ${ROOT_DIR}/bin/mpifort
47
48        INCPATH1  = ${ROOT_DIR}/gcc-4.9.1/include       
49        INCPATH2  = ${ROOT_DIR}/include
50        LIBPATH1 = ${ROOT_DIR}/lib
51#       LIBPATH2 = ${ROOT_DIR}/gcc-4.9.1/lib
52#       LIBPATH2 = /lib
53else
54# Default: System libraries at NILU, gfortran v4.6
55        F90       = /usr/bin/gfortran
56        MPIF90    = /usr/bin/mpif90.openmpi
57
58        INCPATH1 = /xnilu_wrk/flex_wrk/bin64/grib_api/include
59        INCPATH2 = /usr/include
60        LIBPATH1 = /xnilu_wrk/flex_wrk/bin64/grib_api/lib
61#       LIBPATH2 = /usr/lib/x86_64-linux-gnu
62endif
63
64
65## OPTIMIZATION LEVEL
66O_LEV = 2 # [0,1,2,3,g,s,fast]
67O_LEV_DBG = 0 # [0,g]
68
69## LIBRARIES
70LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper -lnetcdff -llapack  # -fopenmp # -llapack
71
72FFLAGS   = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV) -g -m64 -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV) $(FUSER) # -march=native
73
74DBGFLAGS = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV_DBG) -g3 -ggdb3 -m64 -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV_DBG) -fbacktrace -Warray-bounds  -Wall -fcheck=all $(FUSER)  #  -ffpe-trap=invalid,overflow,denormal,underflow,zero -fdump-core
75
76LDFLAGS  = $(FFLAGS) -L$(LIBPATH1) $(LIBS) #-L$(LIBPATH2)
77LDDEBUG  = $(DBGFLAGS) -L$(LIBPATH1) $(LIBS) #-L$(LIBPATH2)
78
79MODOBJS = \
80par_mod.o               com_mod.o \
81conv_mod.o              hanna_mod.o \
82interpol_mod.o          cmapf_mod.o \
83unc_mod.o               oh_mod.o \
84xmass_mod.o             flux_mod.o \
85point_mod.o             outg_mod.o \
86                        random_mod.o
87
88MPI_MODOBJS = \
89mpi_mod.o
90
91## Serial versions (MPI version with same functionality and name '_mpi.f90' exists)
92OBJECTS_SERIAL = \
93        releaseparticles.o      partoutput.o \
94        conccalc.o \
95        init_domainfill.o       concoutput.o  \
96        timemanager.o FLEXPART.o        \
97        readpartpositions.o \
98        partoutput_short.o              \
99        concoutput_nest.o       \
100        boundcond_domainfill.o  \
101        redist.o                \
102        concoutput_surf.o       concoutput_surf_nest.o  \
103        getfields.o
104
105## For MPI version
106OBJECTS_MPI = releaseparticles_mpi.o partoutput_mpi.o \
107        conccalc_mpi.o \
108        init_domainfill_mpi.o concoutput_mpi.o  \
109        timemanager_mpi.o FLEXPART_MPI.o        \
110        readpartpositions_mpi.o         \
111        partoutput_short_mpi.o          \
112        concoutput_nest_mpi.o           \
113        boundcond_domainfill_mpi.o      \
114        redist_mpi.o            \
115        concoutput_surf_mpi.o   concoutput_surf_nest_mpi.o      \
116        getfields_mpi.o
117
118### WINDFIELDS
119## For ECMWF (serial) version:
120OBJECTS_ECMWF = \
121        calcpar.o          readwind.o \
122        richardson.o       verttransform.o \
123        obukhov.o          gridcheck.o  \
124        convmix.o          calcmatrix.o \
125        ecmwf_mod.o
126
127
128## For ECMWF MPI version:
129OBJECTS_ECMWF_MPI = \
130        gridcheck.o        readwind_mpi.o \
131        calcpar.o          \
132        richardson.o       verttransform.o \
133        obukhov.o          \
134        convmix.o          calcmatrix.o \
135        ecmwf_mod.o
136
137## For GFS (serial) version:
138OBJECTS_GFS = \
139        calcpar_gfs.o          readwind_gfs.o \
140        richardson_gfs.o       verttransform_gfs.o \
141        obukhov_gfs.o          gridcheck_gfs.o  \
142        convmix_gfs.o          calcmatrix_gfs.o \
143        gfs_mod.o
144
145OBJECTS = \
146advance.o               initialize.o            \
147writeheader.o           writeheader_txt.o       \
148writeheader_surf.o      assignland.o\
149part0.o                 gethourlyOH.o\
150caldate.o               partdep.o \
151coordtrafo.o            psih.o \
152raerod.o                readcommand.o   \
153drydepokernel.o         readreceptors.o \
154erf.o                   readavailable.o \
155ew.o                    readreleases.o  \
156readdepo.o \
157psim.o                  outgrid_init.o  \
158outgrid_init_nest.o     \
159photo_O1D.o             readlanduse.o \
160interpol_wind.o         readoutgrid.o \
161interpol_all.o          readpaths.o \
162getrb.o                 \
163getrc.o                 \
164getvdep.o               readspecies.o \
165interpol_misslev.o      \
166scalev.o \
167pbl_profile.o           readOHfield.o\
168juldate.o               \
169interpol_vdep.o         interpol_rain.o \
170hanna.o                 wetdepokernel.o \
171mean.o                  wetdepo.o \
172hanna_short.o           windalign.o \
173hanna1.o                        \
174                        gridcheck_nests.o \
175readwind_nests.o        calcpar_nests.o \
176verttransform_nests.o   interpol_all_nests.o \
177interpol_wind_nests.o   interpol_misslev_nests.o \
178interpol_vdep_nests.o   interpol_rain_nests.o \
179readageclasses.o         \
180calcfluxes.o            fluxoutput.o \
181qvsat.o                 skplin.o \
182convect43c.o            \
183sort2.o                 distance.o \
184centerofmass.o          plumetraj.o \
185openouttraj.o           calcpv.o \
186calcpv_nests.o          distance2.o \
187clustering.o            interpol_wind_short.o \
188interpol_wind_short_nests.o shift_field_0.o \
189shift_field.o             \
190openreceptors.o         \
191readoutgrid_nest.o \
192writeheader_nest.o writeheader_nest_surf.o \
193wetdepokernel_nest.o \
194drydepokernel_nest.o    zenithangle.o \
195ohreaction.o            getvdep_nests.o \
196initial_cond_calc.o     initial_cond_output.o \
197dynamic_viscosity.o     get_settling.o  \
198initialize_cbl_vel.o    re_initialize_particle.o \
199cbl.o                   netcdf_output_mod.o
200
201%.o: %.mod
202
203ecmwf: $(FLEXPART-ECMWF)
204ecmwf: FC := $(F90)
205
206ecmwf-mpi: $(FLEXPART-ECMWF-MPI)
207ecmwf-mpi: FC := $(MPIF90)
208
209ecmwf-mpi-dbg: $(FLEXPART-ECMWF-MPI-DBG)
210ecmwf-mpi-dbg: FFLAGS := $(DBGFLAGS) 
211ecmwf-mpi-dbg: LDFLAGS:= $(LDDEBUG) 
212ecmwf-mpi-dbg: FC := $(MPIF90)
213
214gfs: $(FLEXPART-GFS)
215gfs: FC := $(F90)
216
217gfs-mpi: $(FLEXPART-GFS-MPI)
218gfs-mpi: FC := $(MPIF90)
219
220#all: $(FLEXPART-ECMWF)
221#all: $(FLEXPART-ECMWF-MPI)
222
223## This allows for switching between ECMWF/GFS without editing source code.
224wind_mod = ecmwf_mod.o # default wind
225# ifeq ($(MAKECMDGOALS),ecmwf)
226# wind_mod = ecmwf_mod.o
227# endif
228# ifeq ($(MAKECMDGOALS),ecmwf-mpi)
229# wind_mod = ecmwf_mod.o
230# endif
231# ifeq ($(MAKECMDGOALS),ecmwf-mpi-dbg)
232# wind_mod = ecmwf_mod.o
233# endif
234
235ifeq ($(MAKECMDGOALS),gfs)
236wind_mod = gfs_mod.o
237endif
238ifeq ($(MAKECMDGOALS),gfs-mpi)
239wind_mod = gfs_mod.o
240endif
241
242$(FLEXPART-ECMWF): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_ECMWF)
243        +$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_ECMWF) $(LDFLAGS)
244
245$(FLEXPART-ECMWF-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) $(OBJECTS_ECMWF_MPI)
246        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
247        $(OBJECTS_ECMWF_MPI) $(LDFLAGS)
248#       +$(FC) -o $@ *.o $(LDFLAGS)
249
250$(FLEXPART-ECMWF-MPI-DBG): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
251        $(OBJECTS_ECMWF_MPI)
252        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
253        $(OBJECTS_ECMWF_MPI) $(LDFLAGS)
254
255$(FLEXPART-GFS): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_GFS)
256        +$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_GFS) $(LDFLAGS)
257
258$(FLEXPART-GFS-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) $(OBJECTS_GFS)
259        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
260        $(OBJECTS_GFS) $(LDFLAGS)
261
262%.o: %.f90
263        +$(FC) -c $(FFLAGS) $<
264
265clean:
266        \rm -f *.o *.mod
267
268cleanall:
269        \rm -f *.o *.mod $(FLEXPART-ECMWF-MPI) $(FLEXPART-ECMWF-MPI-DBG) $(FLEXPART-ECMWF) \
270        $(FLEXPART-GFS-MPI) $(FLEXPART-GFS)
271
272.SUFFIXES = $(SUFFIXES) .f90
273
274## DEPENDENCIES
275advance.o: cmapf_mod.o com_mod.o hanna_mod.o interpol_mod.o par_mod.o \
276        point_mod.o random_mod.o
277assignland.o: com_mod.o par_mod.o
278boundcond_domainfill.o: com_mod.o par_mod.o point_mod.o random_mod.o
279boundcond_domainfill_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
280        random_mod.o
281calcfluxes.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
282calcmatrix.o: com_mod.o conv_mod.o par_mod.o
283calcmatrix_gfs.o: com_mod.o conv_mod.o par_mod.o
284calcpar.o: com_mod.o par_mod.o
285calcpar_gfs.o: com_mod.o par_mod.o
286calcpar_nests.o: com_mod.o par_mod.o
287calcpv.o: com_mod.o par_mod.o
288calcpv_nests.o: com_mod.o par_mod.o
289caldate.o: par_mod.o
290cbl.o: com_mod.o par_mod.o
291centerofmass.o: par_mod.o
292clustering.o: par_mod.o
293cmapf_mod.o: par_mod.o
294com_mod.o: par_mod.o
295conccalc.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
296conccalc_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o unc_mod.o
297concoutput.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
298concoutput_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
299        unc_mod.o
300concoutput_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
301concoutput_nest_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
302        unc_mod.o
303concoutput_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
304concoutput_surf_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
305        unc_mod.o
306concoutput_surf_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
307concoutput_surf_nest_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o \
308        point_mod.o unc_mod.o
309conv_mod.o: par_mod.o
310convect43c.o: conv_mod.o par_mod.o
311convmix.o: com_mod.o conv_mod.o flux_mod.o par_mod.o
312convmix_gfs.o: com_mod.o conv_mod.o par_mod.o
313coordtrafo.o: com_mod.o par_mod.o point_mod.o
314distance.o: par_mod.o
315distance2.o: par_mod.o
316drydepokernel.o: com_mod.o par_mod.o unc_mod.o
317drydepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
318erf.o: par_mod.o
319FLEXPART.o: com_mod.o conv_mod.o par_mod.o point_mod.o random_mod.o netcdf_output_mod.o
320FLEXPART_MPI.o: com_mod.o conv_mod.o mpi_mod.o par_mod.o point_mod.o \
321        random_mod.o netcdf_output_mod.o
322fluxoutput.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
323get_settling.o: com_mod.o par_mod.o
324getfields.o: com_mod.o par_mod.o
325getfields_mpi.o: com_mod.o par_mod.o mpi_mod.o
326gethourlyOH.o: com_mod.o oh_mod.o par_mod.o
327getrb.o: par_mod.o
328getrc.o: com_mod.o par_mod.o
329getvdep.o: com_mod.o par_mod.o
330getvdep_nests.o: com_mod.o par_mod.o
331gridcheck.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
332gridcheck_emos.o: com_mod.o conv_mod.o par_mod.o
333gridcheck_fnl.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
334gridcheck_gfs.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
335gridcheck_gfs_emos.o: com_mod.o conv_mod.o par_mod.o
336gridcheck_nests.o: com_mod.o par_mod.o
337gridcheck_nests_emos.o: com_mod.o par_mod.o
338gridcheck_orig_ecmwf.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
339hanna.o: com_mod.o hanna_mod.o par_mod.o
340hanna1.o: com_mod.o hanna_mod.o par_mod.o
341hanna_short.o: com_mod.o hanna_mod.o par_mod.o
342init_domainfill.o: com_mod.o par_mod.o point_mod.o random_mod.o
343init_domainfill_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
344        random_mod.o
345initial_cond_calc.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
346initial_cond_output.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
347initialize.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o random_mod.o
348initialize_cbl_vel.o: com_mod.o par_mod.o random_mod.o
349interpol_all.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
350interpol_all_nests.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
351interpol_misslev.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
352interpol_misslev_nests.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
353interpol_mod.o: par_mod.o
354interpol_rain.o: par_mod.o
355interpol_rain_nests.o: par_mod.o
356interpol_vdep.o: com_mod.o interpol_mod.o par_mod.o
357interpol_vdep_nests.o: com_mod.o interpol_mod.o par_mod.o
358interpol_wind.o: com_mod.o interpol_mod.o par_mod.o
359interpol_wind_nests.o: com_mod.o interpol_mod.o par_mod.o
360interpol_wind_short.o: com_mod.o interpol_mod.o par_mod.o
361interpol_wind_short_nests.o: com_mod.o interpol_mod.o par_mod.o
362juldate.o: par_mod.o
363mpi_mod.o: com_mod.o par_mod.o unc_mod.o
364netcdf_output_mod.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
365obukhov.o: par_mod.o
366obukhov_gfs.o: par_mod.o
367ohreaction.o: com_mod.o oh_mod.o par_mod.o
368openouttraj.o: com_mod.o par_mod.o point_mod.o
369openreceptors.o: com_mod.o par_mod.o
370outgrid_init.o: com_mod.o flux_mod.o oh_mod.o outg_mod.o par_mod.o unc_mod.o
371outgrid_init_nest.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
372par_mod.o : $(wind_mod)
373part0.o: par_mod.o
374partdep.o: par_mod.o
375partoutput.o: com_mod.o par_mod.o
376partoutput_mpi.o: com_mod.o mpi_mod.o par_mod.o
377partoutput_short.o: com_mod.o par_mod.o
378partoutput_short_mpi.o: com_mod.o mpi_mod.o par_mod.o
379pbl_profile.o: par_mod.o
380plumetraj.o: com_mod.o par_mod.o point_mod.o
381psih.o: par_mod.o
382psim.o: par_mod.o
383raerod.o: par_mod.o
384re_initialize_particle.o: com_mod.o par_mod.o
385readageclasses.o: com_mod.o par_mod.o
386readavailable.o: com_mod.o par_mod.o
387readcommand.o: com_mod.o par_mod.o
388readdepo.o: com_mod.o par_mod.o
389readlanduse.o: com_mod.o par_mod.o
390readlanduse_int1.o: com_mod.o par_mod.o
391readOHfield.o: com_mod.o oh_mod.o par_mod.o
392readoutgrid.o: com_mod.o outg_mod.o par_mod.o
393readoutgrid_nest.o: com_mod.o outg_mod.o par_mod.o
394readpartpositions.o: com_mod.o par_mod.o random_mod.o
395readpartpositions_mpi.o: com_mod.o mpi_mod.o par_mod.o random_mod.o
396readpaths.o: com_mod.o par_mod.o
397readreceptors.o: com_mod.o par_mod.o
398readreleases.o: com_mod.o par_mod.o point_mod.o xmass_mod.o
399readspecies.o: com_mod.o par_mod.o
400readwind.o: com_mod.o par_mod.o
401readwind_emos.o: com_mod.o par_mod.o
402readwind_gfs.o: com_mod.o par_mod.o
403readwind_gfs_emos.o: com_mod.o par_mod.o
404readwind_mpi.o: com_mod.o mpi_mod.o par_mod.o
405readwind_nests.o: com_mod.o par_mod.o
406readwind_nests_emos.o: com_mod.o par_mod.o
407redist.o: com_mod.o conv_mod.o par_mod.o random_mod.o
408redist_mpi.o: com_mod.o conv_mod.o mpi_mod.o par_mod.o random_mod.o
409releaseparticles.o: com_mod.o par_mod.o point_mod.o random_mod.o \
410        xmass_mod.o
411releaseparticles_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
412        random_mod.o xmass_mod.o
413richardson.o: par_mod.o
414richardson_gfs.o: par_mod.o
415scalev.o: par_mod.o
416shift_field.o: par_mod.o
417shift_field_0.o: par_mod.o
418timemanager.o: com_mod.o flux_mod.o netcdf_output_mod.o oh_mod.o outg_mod.o \
419        par_mod.o point_mod.o unc_mod.o xmass_mod.o
420timemanager_mpi.o: com_mod.o flux_mod.o mpi_mod.o oh_mod.o outg_mod.o \
421        par_mod.o point_mod.o unc_mod.o xmass_mod.o
422verttransform.o: cmapf_mod.o com_mod.o par_mod.o
423verttransform_gfs.o: cmapf_mod.o com_mod.o par_mod.o
424verttransform_nests.o: com_mod.o par_mod.o
425wetdepo.o: com_mod.o par_mod.o point_mod.o
426wetdepokernel.o: com_mod.o par_mod.o unc_mod.o
427wetdepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
428writeheader.o: com_mod.o outg_mod.o par_mod.o point_mod.o
429writeheader_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o
430writeheader_nest_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
431writeheader_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
432writeheader_txt.o: com_mod.o outg_mod.o par_mod.o point_mod.o
433zenithangle.o: par_mod.o
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG