source: flexpart.git/src/makefile @ 2870133

univie
Last change on this file since 2870133 was 2870133, checked in by pesei <petra seibert at univie ac at>, 6 years ago

bugfix makefile (remove netcdf_output_mod dep. if not required)

  • Property mode set to 100644
File size: 16.5 KB
Line 
1SHELL = /bin/bash
2################################################################################
3#   
4#  LICENSE
5#   Valid-License-Identifier:   GPL-3.0-or-later
6#   License text: https://spdx.org/licenses/GPL-3.0-or-later.html#licenseText
7#
8#  DESCRIPTION
9#    Makefile for FLEXPART. Standard (serial) and parallel (MPI) version
10#
11#    Dependencies are resolved in this makefile, so parallel make is
12#    possible ("make -j")
13#
14#   
15#    The makefile is prepared for the environment at NILU.
16#    There, gcc-4.9.1 and libraries are installed under user /homevip/flexpart
17#    NILU users can compile with gfortran version 4.9 by addin "gcc=4.9" to the make command, e.g.
18#       'make -j ecmwf gcc=4.9',
19#    You also set environment variable LD_LIBRARY_PATH to point to compiler libraries
20#
21#    Other users will have to edit the
22#
23#    Makefile was modified to produce unified executable for both ECMWF and GFS meteo data formats
24#
25#    Cpp directives USE_MPIINPLACE were added to three source files. The effect of these directives
26#    are to enable the MPI_IN_PLACE option only if compiled with a -DUSE_MPIINPLACE directive.
27#    Otherwise, a safer option (which requires the allocation of another array) is used by default.
28#    In makefile added the -x f95-cpp-input flag for compiling of cpp directives.
29#
30#  USAGE
31#    Compile serial FLEXPART
32#      make [-j] [serial] [ncf=yes}
33#
34#    Compile parallel FLEXPART
35#      make [-j] mpi [ncf=yes}
36#     
37#    Compile for debugging parallel FLEXPART
38#      make [-j] mpi-dbg [ncf=yes}
39#
40#    ncf=yes adds support for output in netCDF format. Requires netCDF libs to be installed.
41#
42#  AUTHORS
43#    NILU people, Petra Seibert (PS), 2018
44#
45#  VERSION and CHANGES
46#    v1.0 as found in git branch dev on flexpart.eu, 2018-06-08
47#    v1.1 PS, make the file more useful for non-NILU users
48#    v1.2 PS, bugfix netcdf_output_mod dependency (thanks to C. Talianu)
49#
50################################################################################
51
52## PROGRAMS
53# Unified executable names
54# The same executable is used for both ECMWF and GFS metdata
55
56# Parallel processing executable
57FLEXPART-MPI = FLEXPART_MPI
58
59# Parallel processing executable with debugging info
60FLEXPART-MPI-DBG = DBG_FLEXPART_MPI
61
62# Serial processing executable
63FLEXPART-SERIAL = FLEXPART
64
65ifneq ($(gcc), 4.9)
66# make sure that all paths correspond to your system
67        F90      = gfortran
68        MPIF90   = mpifort
69
70        INCPATH1 = /usr/include
71        INCPATH2 = /usr/include
72        LIBPATH1 = /usr/lib
73else
74# NILU: Compiled libraries under user ~flexpart, gfortran v4.9
75        ROOT_DIR = /homevip/flexpart/
76        ROOT_DIR = /homevip/flexpart/
77
78        F90      = ${ROOT_DIR}/gcc-4.9.1/bin/gfortran
79        MPIF90   = ${ROOT_DIR}/bin/mpifort
80
81        INCPATH1 = ${ROOT_DIR}/gcc-4.9.1/include       
82        INCPATH2 = ${ROOT_DIR}/include
83        LIBPATH1 = ${ROOT_DIR}/lib
84endif
85
86
87### Enable netCDF output?
88ifeq ($(ncf), yes)
89        NCOPT = -DUSE_NCF -lnetcdff     
90else
91        NCOPT = -UUSE_NCF
92endif
93
94
95#add path to gributils to default searchpath of make
96VPATH = gributils/
97
98
99## OPTIMIZATION LEVEL
100O_LEV = 2 # [0,1,2,3,g,s,fast]
101O_LEV_DBG = g # [0,g]
102
103## LIBRARIES
104LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper $(NCOPT)
105
106#FFLAGS   = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV) -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
107#FFLAGS   = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV) -cpp -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV) $(NCOPT) $(FUSER)  # -fcheck=all -fbacktrace -march=native
108FFLAGS   = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV) -cpp -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV) $(NCOPT) $(FUSER)  -fcheck=all -fbacktrace -march=native
109
110# Explanation of unusual gfortran options
111# -fmessage-length=0: do not wrap around compiler messages at col 72
112# -flto=jobserver: use GNU make's job server mode to determine the number of parallel jobs. This is useful when the Makefile calling GCC is already executing in parallel. (+ in front of $(FC) further down also needed for parallel compiling).
113
114DBGFLAGS = -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   -fcheck=all
115
116LDFLAGS  = $(FFLAGS) -L$(LIBPATH1) -Wl,-rpath,$(LIBPATH1) $(LIBS) #-L$(LIBPATH2)
117LDDEBUG  = $(DBGFLAGS) -L$(LIBPATH1) $(LIBS) #-L$(LIBPATH2)
118
119MODOBJS = \
120par_mod.o               com_mod.o \
121conv_mod.o              hanna_mod.o \
122interpol_mod.o          cmapf_mod.o \
123unc_mod.o               oh_mod.o \
124xmass_mod.o             flux_mod.o \
125point_mod.o             outg_mod.o \
126mean_mod.o              random_mod.o \
127check_gribfile_mod.o   
128
129
130MPI_MODOBJS = \
131mpi_mod.o
132
133## Serial versions (MPI version with same functionality and name '_mpi.f90' exists)
134OBJECTS_SERIAL = \
135        releaseparticles.o      partoutput.o \
136        conccalc.o \
137        init_domainfill.o       concoutput.o  \
138        timemanager.o FLEXPART.o        \
139        readpartpositions.o \
140        partoutput_short.o              \
141        concoutput_nest.o       \
142        boundcond_domainfill.o  \
143        redist.o                \
144        concoutput_surf.o       concoutput_surf_nest.o  \
145        getfields.o \
146        readwind_ecmwf.o
147
148## For MPI version
149OBJECTS_MPI = releaseparticles_mpi.o partoutput_mpi.o \
150        conccalc_mpi.o \
151        init_domainfill_mpi.o concoutput_mpi.o  \
152        timemanager_mpi.o FLEXPART_MPI.o        \
153        readpartpositions_mpi.o         \
154        partoutput_short_mpi.o          \
155        concoutput_nest_mpi.o           \
156        boundcond_domainfill_mpi.o      \
157        redist_mpi.o            \
158        concoutput_surf_mpi.o   concoutput_surf_nest_mpi.o      \
159        getfields_mpi.o \
160        readwind_ecmwf_mpi.o
161
162OBJECTS_NCF = netcdf_output_mod.o
163
164OBJECTS = \
165advance.o               initialize.o            \
166writeheader.o           writeheader_txt.o       \
167writeprecip.o \
168writeheader_surf.o      assignland.o\
169part0.o                 gethourlyOH.o\
170caldate.o               partdep.o \
171coordtrafo.o            psih.o \
172raerod.o                readcommand.o   \
173drydepokernel.o         readreceptors.o \
174erf.o                   readavailable.o \
175ew.o                    readreleases.o  \
176readdepo.o              get_vdep_prob.o   \
177get_wetscav.o           readwind_gfs.o \
178psim.o                  outgrid_init.o  \
179outgrid_init_nest.o     calcmatrix.o \
180photo_O1D.o             readlanduse.o \
181interpol_wind.o         readoutgrid.o \
182interpol_all.o          readpaths.o \
183getrb.o                 obukhov.o \
184getrc.o                 convmix.o \
185getvdep.o               readspecies.o \
186interpol_misslev.o      richardson.o \
187scalev.o                verttransform_ecmwf.o \
188pbl_profile.o           readOHfield.o \
189juldate.o               verttransform_gfs.o \
190interpol_vdep.o         interpol_rain.o \
191hanna.o                 wetdepokernel.o \
192calcpar.o               wetdepo.o \
193hanna_short.o           windalign.o \
194hanna1.o                gridcheck_ecmwf.o \
195gridcheck_gfs.o         gridcheck_nests.o \
196readwind_nests.o        calcpar_nests.o \
197verttransform_nests.o   interpol_all_nests.o \
198interpol_wind_nests.o   interpol_misslev_nests.o \
199interpol_vdep_nests.o   interpol_rain_nests.o \
200readageclasses.o        \
201calcfluxes.o            fluxoutput.o \
202qvsat.o                 skplin.o \
203convect43c.o            \
204sort2.o                 distance.o \
205centerofmass.o          plumetraj.o \
206openouttraj.o           calcpv.o \
207calcpv_nests.o          distance2.o \
208clustering.o            interpol_wind_short.o \
209interpol_wind_short_nests.o shift_field_0.o \
210shift_field.o             \
211openreceptors.o         \
212readoutgrid_nest.o \
213writeheader_nest.o writeheader_nest_surf.o \
214wetdepokernel_nest.o \
215drydepokernel_nest.o    zenithangle.o \
216ohreaction.o            getvdep_nests.o \
217initial_cond_calc.o     initial_cond_output.o \
218dynamic_viscosity.o     get_settling.o  \
219initialize_cbl_vel.o    re_initialize_particle.o \
220cbl.o
221
222ifeq ($(ncf), yes)
223        OBJECTS := $(OBJECTS) $(OBJECTS_NCF)
224endif
225
226%.o: %.mod
227
228# serial executable
229serial: $(FLEXPART-SERIAL)
230serial: FC := $(F90)
231
232# parallel processing executable
233mpi: $(FLEXPART-MPI)
234mpi: FC := $(MPIF90)
235
236# parallel processing with debugging info
237mpi-dbg: $(FLEXPART-MPI-DBG)
238mpi-dbg: FFLAGS := $(DBGFLAGS)
239mpi-dbg: LDFLAGS:= $(LDDEBUG)
240mpi-dbg: FC := $(MPIF90)
241
242$(FLEXPART-SERIAL): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL)
243        +$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(LDFLAGS)
244
245$(FLEXPART-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
246        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
247        $(LDFLAGS)
248
249$(FLEXPART-MPI-DBG): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
250        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
251        $(LDFLAGS)
252
253%.o: %.f90
254        +$(FC) -c $(FFLAGS) $<
255
256clean:
257        \rm -f *.o *.mod
258
259cleanall:
260        \rm -f *.o *.mod $(FLEXPART-MPI) $(FLEXPART-MPI-DBG) $(FLEXPART-SERIAL)
261
262
263.SUFFIXES = $(SUFFIXES) .f90
264
265## DEPENDENCIES
266get_vdep_prob.o: cmapf_mod.o com_mod.o hanna_mod.o interpol_mod.o par_mod.o \
267        point_mod.o random_mod.o
268advance.o: cmapf_mod.o com_mod.o hanna_mod.o interpol_mod.o par_mod.o \
269        point_mod.o random_mod.o
270assignland.o: com_mod.o par_mod.o
271boundcond_domainfill.o: com_mod.o par_mod.o point_mod.o random_mod.o
272boundcond_domainfill_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
273        random_mod.o
274calcfluxes.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
275calcmatrix.o: check_gribfile_mod.o conv_mod.o com_mod.o par_mod.o
276calcpar.o: com_mod.o par_mod.o check_gribfile_mod.o
277calcpar_nests.o: com_mod.o par_mod.o
278calcpv.o: com_mod.o par_mod.o
279calcpv_nests.o: com_mod.o par_mod.o
280caldate.o: par_mod.o
281cbl.o: com_mod.o par_mod.o
282centerofmass.o: par_mod.o
283clustering.o: par_mod.o
284cmapf_mod.o: par_mod.o
285com_mod.o: par_mod.o
286conccalc.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
287conccalc_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o unc_mod.o
288concoutput.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
289concoutput_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
290        unc_mod.o mean_mod.o
291concoutput_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
292concoutput_nest_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
293        unc_mod.o mean_mod.o
294concoutput_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
295concoutput_surf_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
296        unc_mod.o mean_mod.o
297concoutput_surf_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
298concoutput_surf_nest_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o \
299        point_mod.o unc_mod.o mean_mod.o
300conv_mod.o: par_mod.o
301convect43c.o: conv_mod.o par_mod.o
302convmix.o: com_mod.o conv_mod.o flux_mod.o par_mod.o check_gribfile_mod.o
303coordtrafo.o: com_mod.o par_mod.o point_mod.o
304distance.o: par_mod.o
305distance2.o: par_mod.o
306drydepokernel.o: com_mod.o par_mod.o unc_mod.o
307drydepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
308erf.o: par_mod.o
309ifeq ($(ncf), yes)
310  FLEXPART.o:     com_mod.o conv_mod.o par_mod.o point_mod.o random_mod.o \
311    netcdf_output_mod.o check_gribfile_mod.o
312  FLEXPART_MPI.o: com_mod.o conv_mod.o par_mod.o point_mod.o random_mod.o \
313    netcdf_output_mod.o check_gribfile_mod.o mpi_mod.o
314else
315  FLEXPART.o:     com_mod.o conv_mod.o par_mod.o point_mod.o random_mod.o \
316    check_gribfile_mod.o
317  FLEXPART_MPI.o: com_mod.o conv_mod.o par_mod.o point_mod.o random_mod.o \
318    check_gribfile_mod.o mpi_mod.o
319endif
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 check_gribfile_mod.o
323getfields_mpi.o: com_mod.o par_mod.o mpi_mod.o check_gribfile_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_ecmwf.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
361mean_mod.o: par_mod.o
362mpi_mod.o: com_mod.o par_mod.o unc_mod.o
363netcdf_output_mod.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
364obukhov.o: par_mod.o check_gribfile_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
368outg_mod.o: par_mod.o
369outgrid_init.o: com_mod.o flux_mod.o oh_mod.o outg_mod.o par_mod.o unc_mod.o
370outgrid_init_nest.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
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 mean_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
388#readlanduse_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_ecmwf.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_ecmwf_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 check_gribfile_mod.o
412scalev.o: par_mod.o
413shift_field.o: par_mod.o
414shift_field_0.o: par_mod.o
415ifeq ($(ncf), yes)
416  timemanager.o:     par_mod.o com_mod.o flux_mod.o oh_mod.o outg_mod.o \
417          point_mod.o unc_mod.o xmass_mod.o netcdf_output_mod.o
418  timemanager_mpi.o: par_mod.o com_mod.o flux_mod.o oh_mod.o outg_mod.o \
419          point_mod.o unc_mod.o xmass_mod.o netcdf_output_mod.o mpi_mod.o
420else
421  timemanager.o:     par_mod.o com_mod.o flux_mod.o oh_mod.o outg_mod.o \
422          point_mod.o unc_mod.o xmass_mod.o
423  timemanager_mpi.o: par_mod.o com_mod.o flux_mod.o oh_mod.o outg_mod.o \
424          point_mod.o unc_mod.o xmass_mod.o mpi_mod.o
425endif
426unc_mod.o: par_mod.o
427verttransform_ecmwf.o: cmapf_mod.o com_mod.o par_mod.o
428verttransform_gfs.o: cmapf_mod.o com_mod.o par_mod.o
429verttransform_nests.o: com_mod.o par_mod.o
430get_wetscav.o: com_mod.o par_mod.o point_mod.o
431wetdepo.o: com_mod.o par_mod.o point_mod.o
432wetdepokernel.o: com_mod.o par_mod.o unc_mod.o
433wetdepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
434writeheader.o: com_mod.o outg_mod.o par_mod.o point_mod.o
435writeprecip.o: com_mod.o par_mod.o point_mod.o
436writeheader_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o
437writeheader_nest_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
438writeheader_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
439writeheader_txt.o: com_mod.o outg_mod.o par_mod.o point_mod.o
440zenithangle.o: par_mod.o
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG