source: flexpart.git/src/makefile @ fdc0f03

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

Code for cloud water should be correct if the total cw is stored in field clwc (old scheme) or in field qc (new scheme). Minor edits in some files.

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