source: flexpart.git/src/makefile @ 75a4ded

10.4.1_peseiGFS_025bugfixes+enhancementsdevrelease-10release-10.4.1scaling-bugunivie
Last change on this file since 75a4ded was 92a74b2, checked in by Sabine <sabine.eckhardt@…>, 7 years ago

get_vdep_prob instead of advance

  • Property mode set to 100644
File size: 15.3 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#  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, 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 = g # [0,g]
66
67## LIBRARIES
68LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper -lnetcdff # -fopenmp
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)  #-Warray-bounds -fcheck=all # -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   -Wall  -fdump-core $(FUSER)  #  -ffpe-trap=invalid,overflow,denormal,underflow,zero  -Warray-bounds -fcheck=all
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 \
84mean_mod.o              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              get_vdep_prob.o   \
155get_wetscav.o   \
156psim.o                  outgrid_init.o  \
157outgrid_init_nest.o     \
158photo_O1D.o             readlanduse.o \
159interpol_wind.o         readoutgrid.o \
160interpol_all.o          readpaths.o \
161getrb.o                 \
162getrc.o                 \
163getvdep.o               readspecies.o \
164interpol_misslev.o      \
165scalev.o \
166pbl_profile.o           readOHfield.o\
167juldate.o               \
168interpol_vdep.o         interpol_rain.o \
169hanna.o                 wetdepokernel.o \
170                  wetdepo.o \
171hanna_short.o           windalign.o \
172hanna1.o                        \
173                        gridcheck_nests.o \
174readwind_nests.o        calcpar_nests.o \
175verttransform_nests.o   interpol_all_nests.o \
176interpol_wind_nests.o   interpol_misslev_nests.o \
177interpol_vdep_nests.o   interpol_rain_nests.o \
178readageclasses.o         \
179calcfluxes.o            fluxoutput.o \
180qvsat.o                 skplin.o \
181convect43c.o            \
182sort2.o                 distance.o \
183centerofmass.o          plumetraj.o \
184openouttraj.o           calcpv.o \
185calcpv_nests.o          distance2.o \
186clustering.o            interpol_wind_short.o \
187interpol_wind_short_nests.o shift_field_0.o \
188shift_field.o             \
189openreceptors.o         \
190readoutgrid_nest.o \
191writeheader_nest.o writeheader_nest_surf.o \
192wetdepokernel_nest.o \
193drydepokernel_nest.o    zenithangle.o \
194ohreaction.o            getvdep_nests.o \
195initial_cond_calc.o     initial_cond_output.o \
196dynamic_viscosity.o     get_settling.o  \
197initialize_cbl_vel.o    re_initialize_particle.o \
198cbl.o                   netcdf_output_mod.o
199
200%.o: %.mod
201
202ecmwf: $(FLEXPART-ECMWF)
203ecmwf: FC := $(F90)
204
205ecmwf-mpi: $(FLEXPART-ECMWF-MPI)
206ecmwf-mpi: FC := $(MPIF90)
207
208ecmwf-mpi-dbg: $(FLEXPART-ECMWF-MPI-DBG)
209ecmwf-mpi-dbg: FFLAGS := $(DBGFLAGS) 
210ecmwf-mpi-dbg: LDFLAGS:= $(LDDEBUG) 
211ecmwf-mpi-dbg: FC := $(MPIF90)
212
213gfs: $(FLEXPART-GFS)
214gfs: FC := $(F90)
215
216gfs-mpi: $(FLEXPART-GFS-MPI)
217gfs-mpi: FC := $(MPIF90)
218
219#all: $(FLEXPART-ECMWF)
220#all: $(FLEXPART-ECMWF-MPI)
221
222## This allows for switching between ECMWF/GFS without editing source code.
223wind_mod = ecmwf_mod.o # default wind
224# ifeq ($(MAKECMDGOALS),ecmwf)
225# wind_mod = ecmwf_mod.o
226# endif
227# ifeq ($(MAKECMDGOALS),ecmwf-mpi)
228# wind_mod = ecmwf_mod.o
229# endif
230# ifeq ($(MAKECMDGOALS),ecmwf-mpi-dbg)
231# wind_mod = ecmwf_mod.o
232# endif
233
234ifeq ($(MAKECMDGOALS),gfs)
235wind_mod = gfs_mod.o
236endif
237ifeq ($(MAKECMDGOALS),gfs-mpi)
238wind_mod = gfs_mod.o
239endif
240
241$(FLEXPART-ECMWF): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_ECMWF)
242        +$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_ECMWF) $(LDFLAGS)
243
244$(FLEXPART-ECMWF-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) $(OBJECTS_ECMWF_MPI)
245        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
246        $(OBJECTS_ECMWF_MPI) $(LDFLAGS)
247#       +$(FC) -o $@ *.o $(LDFLAGS)
248
249$(FLEXPART-ECMWF-MPI-DBG): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
250        $(OBJECTS_ECMWF_MPI)
251        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
252        $(OBJECTS_ECMWF_MPI) $(LDFLAGS)
253
254$(FLEXPART-GFS): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_GFS)
255        +$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_GFS) $(LDFLAGS)
256
257$(FLEXPART-GFS-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) $(OBJECTS_GFS)
258        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
259        $(OBJECTS_GFS) $(LDFLAGS)
260
261%.o: %.f90
262        +$(FC) -c $(FFLAGS) $<
263
264clean:
265        \rm -f *.o *.mod
266
267cleanall:
268        \rm -f *.o *.mod $(FLEXPART-ECMWF-MPI) $(FLEXPART-ECMWF-MPI-DBG) $(FLEXPART-ECMWF) \
269        $(FLEXPART-GFS-MPI) $(FLEXPART-GFS)
270
271.SUFFIXES = $(SUFFIXES) .f90
272
273## DEPENDENCIES
274get_vdep_prob.o: cmapf_mod.o com_mod.o hanna_mod.o interpol_mod.o par_mod.o \
275        point_mod.o random_mod.o
276advance.o: cmapf_mod.o com_mod.o hanna_mod.o interpol_mod.o par_mod.o \
277        point_mod.o random_mod.o
278assignland.o: com_mod.o par_mod.o
279boundcond_domainfill.o: com_mod.o par_mod.o point_mod.o random_mod.o
280boundcond_domainfill_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
281        random_mod.o
282calcfluxes.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
283calcmatrix.o: com_mod.o conv_mod.o par_mod.o
284calcmatrix_gfs.o: com_mod.o conv_mod.o par_mod.o
285calcpar.o: com_mod.o par_mod.o
286calcpar_gfs.o: com_mod.o par_mod.o
287calcpar_nests.o: com_mod.o par_mod.o
288calcpv.o: com_mod.o par_mod.o
289calcpv_nests.o: com_mod.o par_mod.o
290caldate.o: par_mod.o
291cbl.o: com_mod.o par_mod.o
292centerofmass.o: par_mod.o
293clustering.o: par_mod.o
294cmapf_mod.o: par_mod.o
295com_mod.o: par_mod.o
296conccalc.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
297conccalc_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o unc_mod.o
298concoutput.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
299concoutput_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
300        unc_mod.o mean_mod.o
301concoutput_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
302concoutput_nest_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
303        unc_mod.o mean_mod.o
304concoutput_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
305concoutput_surf_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o point_mod.o \
306        unc_mod.o mean_mod.o
307concoutput_surf_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
308concoutput_surf_nest_mpi.o: com_mod.o mpi_mod.o outg_mod.o par_mod.o \
309        point_mod.o unc_mod.o mean_mod.o
310conv_mod.o: par_mod.o
311convect43c.o: conv_mod.o par_mod.o
312convmix.o: com_mod.o conv_mod.o flux_mod.o par_mod.o
313convmix_gfs.o: com_mod.o conv_mod.o par_mod.o
314coordtrafo.o: com_mod.o par_mod.o point_mod.o
315distance.o: par_mod.o
316distance2.o: par_mod.o
317drydepokernel.o: com_mod.o par_mod.o unc_mod.o
318drydepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
319erf.o: par_mod.o
320FLEXPART.o: com_mod.o conv_mod.o par_mod.o point_mod.o random_mod.o netcdf_output_mod.o
321FLEXPART_MPI.o: com_mod.o conv_mod.o mpi_mod.o par_mod.o point_mod.o \
322        random_mod.o netcdf_output_mod.o
323fluxoutput.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
324get_settling.o: com_mod.o par_mod.o
325getfields.o: com_mod.o par_mod.o
326getfields_mpi.o: com_mod.o par_mod.o mpi_mod.o
327gethourlyOH.o: com_mod.o oh_mod.o par_mod.o
328getrb.o: par_mod.o
329getrc.o: com_mod.o par_mod.o
330getvdep.o: com_mod.o par_mod.o
331getvdep_nests.o: com_mod.o par_mod.o
332gridcheck.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
333gridcheck_emos.o: com_mod.o conv_mod.o par_mod.o
334gridcheck_fnl.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
335gridcheck_gfs.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
336gridcheck_gfs_emos.o: com_mod.o conv_mod.o par_mod.o
337gridcheck_nests.o: com_mod.o par_mod.o
338gridcheck_nests_emos.o: com_mod.o par_mod.o
339gridcheck_orig_ecmwf.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
340hanna.o: com_mod.o hanna_mod.o par_mod.o
341hanna1.o: com_mod.o hanna_mod.o par_mod.o
342hanna_short.o: com_mod.o hanna_mod.o par_mod.o
343init_domainfill.o: com_mod.o par_mod.o point_mod.o random_mod.o
344init_domainfill_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
345        random_mod.o
346initial_cond_calc.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
347initial_cond_output.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o
348initialize.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o random_mod.o
349initialize_cbl_vel.o: com_mod.o par_mod.o random_mod.o
350interpol_all.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
351interpol_all_nests.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
352interpol_misslev.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
353interpol_misslev_nests.o: com_mod.o hanna_mod.o interpol_mod.o par_mod.o
354interpol_mod.o: par_mod.o
355interpol_rain.o: par_mod.o
356interpol_rain_nests.o: par_mod.o
357interpol_vdep.o: com_mod.o interpol_mod.o par_mod.o
358interpol_vdep_nests.o: com_mod.o interpol_mod.o par_mod.o
359interpol_wind.o: com_mod.o interpol_mod.o par_mod.o
360interpol_wind_nests.o: com_mod.o interpol_mod.o par_mod.o
361interpol_wind_short.o: com_mod.o interpol_mod.o par_mod.o
362interpol_wind_short_nests.o: com_mod.o interpol_mod.o par_mod.o
363juldate.o: par_mod.o
364mean_mod.o: par_mod.o
365mpi_mod.o: com_mod.o par_mod.o unc_mod.o
366netcdf_output_mod.o: com_mod.o outg_mod.o par_mod.o point_mod.o unc_mod.o mean_mod.o
367obukhov.o: par_mod.o
368obukhov_gfs.o: par_mod.o
369ohreaction.o: com_mod.o oh_mod.o par_mod.o
370openouttraj.o: com_mod.o par_mod.o point_mod.o
371openreceptors.o: com_mod.o par_mod.o
372outg_mod.o: par_mod.o
373outgrid_init.o: com_mod.o flux_mod.o oh_mod.o outg_mod.o par_mod.o unc_mod.o
374outgrid_init_nest.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
375par_mod.o : $(wind_mod)
376part0.o: par_mod.o
377partdep.o: par_mod.o
378partoutput.o: com_mod.o par_mod.o
379partoutput_mpi.o: com_mod.o mpi_mod.o par_mod.o
380partoutput_short.o: com_mod.o par_mod.o
381partoutput_short_mpi.o: com_mod.o mpi_mod.o par_mod.o
382pbl_profile.o: par_mod.o
383plumetraj.o: com_mod.o par_mod.o point_mod.o mean_mod.o
384psih.o: par_mod.o
385psim.o: par_mod.o
386raerod.o: par_mod.o
387re_initialize_particle.o: com_mod.o par_mod.o
388readageclasses.o: com_mod.o par_mod.o
389readavailable.o: com_mod.o par_mod.o
390readcommand.o: com_mod.o par_mod.o
391readdepo.o: com_mod.o par_mod.o
392readlanduse.o: com_mod.o par_mod.o
393#readlanduse_int1.o: com_mod.o par_mod.o
394readOHfield.o: com_mod.o oh_mod.o par_mod.o
395readoutgrid.o: com_mod.o outg_mod.o par_mod.o
396readoutgrid_nest.o: com_mod.o outg_mod.o par_mod.o
397readpartpositions.o: com_mod.o par_mod.o random_mod.o
398readpartpositions_mpi.o: com_mod.o mpi_mod.o par_mod.o random_mod.o
399readpaths.o: com_mod.o par_mod.o
400readreceptors.o: com_mod.o par_mod.o
401readreleases.o: com_mod.o par_mod.o point_mod.o xmass_mod.o
402readspecies.o: com_mod.o par_mod.o
403readwind.o: com_mod.o par_mod.o
404readwind_emos.o: com_mod.o par_mod.o
405readwind_gfs.o: com_mod.o par_mod.o
406readwind_gfs_emos.o: com_mod.o par_mod.o
407readwind_mpi.o: com_mod.o mpi_mod.o par_mod.o
408readwind_nests.o: com_mod.o par_mod.o
409readwind_nests_emos.o: com_mod.o par_mod.o
410redist.o: com_mod.o conv_mod.o par_mod.o random_mod.o
411redist_mpi.o: com_mod.o conv_mod.o mpi_mod.o par_mod.o random_mod.o
412releaseparticles.o: com_mod.o par_mod.o point_mod.o random_mod.o \
413        xmass_mod.o
414releaseparticles_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
415        random_mod.o xmass_mod.o
416richardson.o: par_mod.o
417richardson_gfs.o: par_mod.o
418scalev.o: par_mod.o
419shift_field.o: par_mod.o
420shift_field_0.o: par_mod.o
421timemanager.o: com_mod.o flux_mod.o netcdf_output_mod.o oh_mod.o outg_mod.o \
422        par_mod.o point_mod.o unc_mod.o xmass_mod.o
423timemanager_mpi.o: com_mod.o flux_mod.o mpi_mod.o oh_mod.o outg_mod.o \
424        par_mod.o point_mod.o unc_mod.o xmass_mod.o
425unc_mod.o: par_mod.o
426verttransform.o: cmapf_mod.o com_mod.o par_mod.o
427verttransform_gfs.o: cmapf_mod.o com_mod.o par_mod.o
428verttransform_nests.o: com_mod.o par_mod.o
429get_wetscav.o: com_mod.o par_mod.o point_mod.o
430wetdepo.o: com_mod.o par_mod.o point_mod.o
431wetdepokernel.o: com_mod.o par_mod.o unc_mod.o
432wetdepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
433writeheader.o: com_mod.o outg_mod.o par_mod.o point_mod.o
434writeheader_nest.o: com_mod.o outg_mod.o par_mod.o point_mod.o
435writeheader_nest_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
436writeheader_surf.o: com_mod.o outg_mod.o par_mod.o point_mod.o
437writeheader_txt.o: com_mod.o outg_mod.o par_mod.o point_mod.o
438zenithangle.o: par_mod.o
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG