Changes in src/makefile [d1a8707:d8eed02] in flexpart.git


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/makefile

    rd1a8707 rd8eed02  
    1212#       'make -j ecmwf gcc=4.9',
    1313#    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.
    1422#
    1523#  USAGE
    16 #    Compile serial FLEXPART (ECMWF)
    17 #      make [-j] ecmwf
    18 #
    19 #    Compile parallel FLEXPART (ECMWF)
    20 #      make [-j] ecmwf-mpi
     24#    Compile serial FLEXPART
     25#      make [-j] serial
     26#
     27#    Compile parallel FLEXPART
     28#      make [-j] mpi
    2129#     
    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#    Compile for debugging parallel FLEXPART
     31#      make [-j] mpi-dbg
    3032#
    3133################################################################################
    3234
    3335## PROGRAMS
    34 FLEXPART-ECMWF-MPI      = FP_ecmwf_MPI
    35 FLEXPART-ECMWF-MPI-DBG  = DBG_FP_ecmwf_MPI
    36 FLEXPART-ECMWF          = FP_ecmwf_gfortran
    37 FLEXPART-GFS            = FP_gfs_gfortran
    38 FLEXPART-GFS-MPI        = FP_gfs_MPI
     36# Unified executable names
     37# The same executable is used for both ECMWF and GFS metdata
     38
     39# Parallel processing executable
     40FLEXPART-MPI = FLEXPART_MPI
     41
     42# Parallel processing executable with debugging info
     43FLEXPART-MPI-DBG = DBG_FLEXPART_MPI
     44
     45# Serial processing executable
     46FLEXPART-SERIAL = FLEXPART
     47
    3948
    4049ifeq ($(gcc), 4.9)
     
    6170
    6271
     72# path to gributils used to detect meteodata format
     73VPATH = gributils/
     74
     75
    6376## OPTIMIZATION LEVEL
    6477O_LEV = 2 # [0,1,2,3,g,s,fast]
     
    6881LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper -lnetcdff # -fopenmp
    6982
    70 FFLAGS   = -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)  #-Warray-bounds -fcheck=all # -march=native
    71 
    72 DBGFLAGS = -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   -Wall  -fdump-core $(FUSER)  #  -ffpe-trap=invalid,overflow,denormal,underflow,zero  -Warray-bounds -fcheck=all
    73 
    74 LDFLAGS  = $(FFLAGS) -L$(LIBPATH1) $(LIBS) #-L$(LIBPATH2)
     83FFLAGS   = -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) $(FUSER)  #-Warray-bounds -fcheck=all # -march=native
     84
     85DBGFLAGS = -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) -fbacktrace   -Wall  -fdump-core $(FUSER)  #  -ffpe-trap=invalid,overflow,denormal,underflow,zero  -Warray-bounds -fcheck=all
     86
     87LDFLAGS  = $(FFLAGS) -L$(LIBPATH1) -Wl,-rpath,$(LIBPATH1) $(LIBS) #-L$(LIBPATH2)
    7588LDDEBUG  = $(DBGFLAGS) -L$(LIBPATH1) $(LIBS) #-L$(LIBPATH2)
    7689
     
    8295xmass_mod.o             flux_mod.o \
    8396point_mod.o             outg_mod.o \
    84 mean_mod.o              random_mod.o
     97mean_mod.o              random_mod.o \
     98class_gribfile_mod.o
    8599
    86100MPI_MODOBJS = \
     
    99113        redist.o                \
    100114        concoutput_surf.o       concoutput_surf_nest.o  \
    101         getfields.o
     115        getfields.o \
     116        readwind_ecmwf.o
    102117
    103118## For MPI version
     
    112127        redist_mpi.o            \
    113128        concoutput_surf_mpi.o   concoutput_surf_nest_mpi.o      \
    114         getfields_mpi.o
    115 
    116 ### WINDFIELDS
    117 ## For ECMWF (serial) version:
    118 OBJECTS_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:
    127 OBJECTS_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:
    136 OBJECTS_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
     129        getfields_mpi.o \
     130        readwind_ecmwf_mpi.o
    142131
    143132OBJECTS = \
     
    154143ew.o                    readreleases.o  \
    155144readdepo.o              get_vdep_prob.o   \
    156 get_wetscav.o   \
     145get_wetscav.o           readwind_gfs.o \
    157146psim.o                  outgrid_init.o  \
    158 outgrid_init_nest.o     \
     147outgrid_init_nest.o     calcmatrix.o \
    159148photo_O1D.o             readlanduse.o \
    160149interpol_wind.o         readoutgrid.o \
    161150interpol_all.o          readpaths.o \
    162 getrb.o                 \
    163 getrc.o                 \
     151getrb.o                 obukhov.o \
     152getrc.o                 convmix.o \
    164153getvdep.o               readspecies.o \
    165 interpol_misslev.o      \
    166 scalev.o \
    167 pbl_profile.o           readOHfield.o\
    168 juldate.o               \
     154interpol_misslev.o      richardson.o \
     155scalev.o                verttransform_ecmwf.o \
     156pbl_profile.o           readOHfield.o \
     157juldate.o               verttransform_gfs.o \
    169158interpol_vdep.o         interpol_rain.o \
    170159hanna.o                 wetdepokernel.o \
    171                   wetdepo.o \
     160calcpar.o               wetdepo.o \
    172161hanna_short.o           windalign.o \
    173 hanna1.o                        \
    174                         gridcheck_nests.o \
     162hanna1.o                gridcheck_ecmwf.o \
     163gridcheck_gfs.o         gridcheck_nests.o \
    175164readwind_nests.o        calcpar_nests.o \
    176165verttransform_nests.o   interpol_all_nests.o \
    177166interpol_wind_nests.o   interpol_misslev_nests.o \
    178167interpol_vdep_nests.o   interpol_rain_nests.o \
    179 readageclasses.o        \
     168readageclasses.o        detectformat.o \
    180169calcfluxes.o            fluxoutput.o \
    181170qvsat.o                 skplin.o \
     
    201190%.o: %.mod
    202191
    203 ecmwf: $(FLEXPART-ECMWF)
    204 ecmwf: FC := $(F90)
    205 
    206 ecmwf-mpi: $(FLEXPART-ECMWF-MPI)
    207 ecmwf-mpi: FC := $(MPIF90)
    208 
    209 ecmwf-mpi-dbg: $(FLEXPART-ECMWF-MPI-DBG)
    210 ecmwf-mpi-dbg: FFLAGS := $(DBGFLAGS)
    211 ecmwf-mpi-dbg: LDFLAGS:= $(LDDEBUG)
    212 ecmwf-mpi-dbg: FC := $(MPIF90)
    213 
    214 gfs: $(FLEXPART-GFS)
    215 gfs: FC := $(F90)
    216 
    217 gfs-mpi: $(FLEXPART-GFS-MPI)
    218 gfs-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.
    224 wind_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 
    235 ifeq ($(MAKECMDGOALS),gfs)
    236 wind_mod = gfs_mod.o
    237 endif
    238 ifeq ($(MAKECMDGOALS),gfs-mpi)
    239 wind_mod = gfs_mod.o
    240 endif
    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)
     192# serial executable
     193serial: $(FLEXPART-SERIAL)
     194serial: FC := $(F90)
     195
     196# parallel processing executable
     197mpi: $(FLEXPART-MPI)
     198mpi: FC := $(MPIF90)
     199
     200# parallel processing with debugging info
     201mpi-dbg: $(FLEXPART-MPI-DBG)
     202mpi-dbg: FFLAGS := $(DBGFLAGS)
     203mpi-dbg: LDFLAGS:= $(LDDEBUG)
     204mpi-dbg: FC := $(MPIF90)
     205
     206$(FLEXPART-SERIAL): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL)
     207        +$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(LDFLAGS)
     208
     209$(FLEXPART-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
    246210        +$(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)
     211        $(LDFLAGS)
     212
     213$(FLEXPART-MPI-DBG): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
    252214        +$(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)
     215        $(LDFLAGS)
    261216
    262217%.o: %.f90
     
    267222
    268223cleanall:
    269         \rm -f *.o *.mod $(FLEXPART-ECMWF-MPI) $(FLEXPART-ECMWF-MPI-DBG) $(FLEXPART-ECMWF) \
    270         $(FLEXPART-GFS-MPI) $(FLEXPART-GFS)
     224        \rm -f *.o *.mod $(FLEXPART-MPI) $(FLEXPART-MPI-DBG) $(FLEXPART-SERIAL)
     225
    271226
    272227.SUFFIXES = $(SUFFIXES) .f90
     
    282237        random_mod.o
    283238calcfluxes.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
    284 calcmatrix.o: com_mod.o conv_mod.o par_mod.o
    285 calcmatrix_gfs.o: com_mod.o conv_mod.o par_mod.o
    286 calcpar.o: com_mod.o par_mod.o
    287 calcpar_gfs.o: com_mod.o par_mod.o
     239calcmatrix.o: com_mod.o conv_mod.o par_mod.o class_gribfile_mod.o
     240calcpar.o: com_mod.o par_mod.o class_gribfile_mod.o
    288241calcpar_nests.o: com_mod.o par_mod.o
    289242calcpv.o: com_mod.o par_mod.o
     
    311264conv_mod.o: par_mod.o
    312265convect43c.o: conv_mod.o par_mod.o
    313 convmix.o: com_mod.o conv_mod.o flux_mod.o par_mod.o
    314 convmix_gfs.o: com_mod.o conv_mod.o par_mod.o
     266convmix.o: com_mod.o conv_mod.o flux_mod.o par_mod.o class_gribfile_mod.o
    315267coordtrafo.o: com_mod.o par_mod.o point_mod.o
     268detectformat.o: com_mod.o par_mod.o class_gribfile_mod.o
    316269distance.o: par_mod.o
    317270distance2.o: par_mod.o
     
    319272drydepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
    320273erf.o: par_mod.o
    321 FLEXPART.o: com_mod.o conv_mod.o par_mod.o point_mod.o random_mod.o netcdf_output_mod.o
     274FLEXPART.o: com_mod.o conv_mod.o par_mod.o point_mod.o random_mod.o netcdf_output_mod.o class_gribfile_mod.o
    322275FLEXPART_MPI.o: com_mod.o conv_mod.o mpi_mod.o par_mod.o point_mod.o \
    323         random_mod.o netcdf_output_mod.o
     276        random_mod.o netcdf_output_mod.o class_gribfile_mod.o
    324277fluxoutput.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
    325278get_settling.o: com_mod.o par_mod.o
    326 getfields.o: com_mod.o par_mod.o
    327 getfields_mpi.o: com_mod.o par_mod.o mpi_mod.o
     279getfields.o: com_mod.o par_mod.o class_gribfile_mod.o
     280getfields_mpi.o: com_mod.o par_mod.o mpi_mod.o class_gribfile_mod.o
    328281gethourlyOH.o: com_mod.o oh_mod.o par_mod.o
    329282getrb.o: par_mod.o
     
    331284getvdep.o: com_mod.o par_mod.o
    332285getvdep_nests.o: com_mod.o par_mod.o
    333 gridcheck.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
     286gridcheck_ecmwf.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
    334287gridcheck_emos.o: com_mod.o conv_mod.o par_mod.o
    335288gridcheck_fnl.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
     
    366319mpi_mod.o: com_mod.o par_mod.o unc_mod.o
    367320netcdf_output_mod.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
    368 obukhov.o: par_mod.o
    369 obukhov_gfs.o: par_mod.o
     321obukhov.o: par_mod.o class_gribfile_mod.o
    370322ohreaction.o: com_mod.o oh_mod.o par_mod.o
    371323openouttraj.o: com_mod.o par_mod.o point_mod.o
     
    374326outgrid_init.o: com_mod.o flux_mod.o oh_mod.o outg_mod.o par_mod.o unc_mod.o
    375327outgrid_init_nest.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
    376 par_mod.o : $(wind_mod)
    377328part0.o: par_mod.o
    378329partdep.o: par_mod.o
     
    402353readreleases.o: com_mod.o par_mod.o point_mod.o xmass_mod.o
    403354readspecies.o: com_mod.o par_mod.o
    404 readwind.o: com_mod.o par_mod.o
     355readwind_ecmwf.o: com_mod.o par_mod.o
    405356readwind_emos.o: com_mod.o par_mod.o
    406357readwind_gfs.o: com_mod.o par_mod.o
    407358readwind_gfs_emos.o: com_mod.o par_mod.o
    408 readwind_mpi.o: com_mod.o mpi_mod.o par_mod.o
     359readwind_ecmwf_mpi.o: com_mod.o mpi_mod.o par_mod.o
    409360readwind_nests.o: com_mod.o par_mod.o
    410361readwind_nests_emos.o: com_mod.o par_mod.o
     
    415366releaseparticles_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
    416367        random_mod.o xmass_mod.o
    417 richardson.o: par_mod.o
    418 richardson_gfs.o: par_mod.o
     368richardson.o: par_mod.o class_gribfile_mod.o
    419369scalev.o: par_mod.o
    420370shift_field.o: par_mod.o
     
    423373        par_mod.o point_mod.o unc_mod.o xmass_mod.o
    424374timemanager_mpi.o: com_mod.o flux_mod.o mpi_mod.o oh_mod.o outg_mod.o \
    425         par_mod.o point_mod.o unc_mod.o xmass_mod.o
     375        par_mod.o point_mod.o unc_mod.o xmass_mod.o netcdf_output_mod.o
    426376unc_mod.o: par_mod.o
    427 verttransform.o: cmapf_mod.o com_mod.o par_mod.o
     377verttransform_ecmwf.o: cmapf_mod.o com_mod.o par_mod.o
    428378verttransform_gfs.o: cmapf_mod.o com_mod.o par_mod.o
    429379verttransform_nests.o: com_mod.o par_mod.o
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG