AERMOD 16216r is the preferred air quality dispersion model of US-EPA and it is used all over the world as reference model for regulatory purposes. US-EPA distributes the Fortran source code and an executable to be used with Microsoft Windows.
The source code is available on the US-EPA web site.
In order to compile the source code under Linux and macOS with the free GNU Fortran compiler gfortran you can use this commnad:
gfortran -o aermod.x -fbounds-check -fcheck=all -Wall -frecursive -O3 modules.f aermod.f setup.f coset.f soset.f reset.f meset.f ouset.f inpsum.f metext.f iblval.f siggrid.f tempgrid.f windgrid.f calc1.f calc2.f prise.f prime.f sigmas.f pitarea.f output.f evset.f evcalc.f evoutput.f
In order to compile the source code of previous version 15181 under Linux and OS X with the free GNU Fortran compiler gfortran it is necessary to make some fixes to the source code, otherwise there is a segmentation fault error that prevents a successful compilation.
In file setup.f, lines 1636-1639:
XR_SCS(:) = 0.0D0 YR_SCS(:) = 0.0D0 XR_SCS(:) = 0.0D0 YR_SCS(:) = 0.0D0
need to be changed in:
IF (ALLOCATED(XR_SCS)) XR_SCS(:) = 0.0D0 IF (ALLOCATED(YR_SCS)) YR_SCS(:) = 0.0D0 IF (ALLOCATED(XR_RCS)) XR_RCS(:) = 0.0D0 IF (ALLOCATED(YR_RCS)) YR_RCS(:) = 0.0D0
Also, it is necessary to set the -frecursive compilation flag to avoid another runtime error showing this in other cases:
At line 5910 of file aermod.f
Fortran runtime error: Recursive call to nonrecursive procedure
A working makefile for gfortran under Linux is this one:
PROG = aermod SRCS = modules.f aermod.f calc1.f calc2.f coset.f evcalc.f evoutput.f evset.f iblval.f \ inpsum.f meset.f metext.f ouset.f output.f pitarea.f \ prime.f prise.f reset.f setup.f siggrid.f sigmas.f soset.f tempgrid.f \ windgrid.f OBJS = modules.o aermod.o calc1.o calc2.o coset.o evcalc.o evoutput.o evset.o iblval.o \ inpsum.o meset.o metext.o ouset.o output.o pitarea.o \ prime.o prise.o reset.o setup.o siggrid.o sigmas.o soset.o tempgrid.o \ windgrid.o LIBS = FC = gfortran FFLAGS = -fbounds-check -fcheck=all -Wall -frecursive -O3 LDFLAGS = all: $(PROG) $(PROG): $(OBJS) $(FC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) clean: rm -f $(PROG) $(OBJS) *.mod
Save the text in a file named "makefile" in the same directory of the source code and in that directory type make
to build aermod
Then run int as ./aermod
in the directory where the input file aermod.inp is.
For installing gfortran under OS X you can refer to this article.