#
#FC = ifort
MPIF90 = mpif90 -fc=ifort
FC = $(MPIF90)
DBGFLAGS = -debug full -traceback
DBGFLAGS += -check bounds -check format -check output_conversion -check pointers -check uninit
REAL8  = -r8
DIRS = . edynamo
VPATH     := $(subst $(space),:,$(DIRS))
MACHINES = machines.ini
NPROC = 1

FFLAGS = -O3 -I$(INC_NETCDF)
#FFLAGS = -g $(DBGFLAGS) -I$(INC_NETCDF)

.SUFFIXES: .o .F90 .F .for .f

%.o: %.F90
	$(FC) $(FFLAGS) -c  -o $@ $<
%.o: %.F
	$(FC) $(FFLAGS) $(REAL8) -c  -o $@ $<
%.o: %.f
	$(FC) $(FFLAGS) -c  -o $@ $<
%.o: %.for
	$(FC) $(FFLAGS) -c  -o $@ $<
#
SOURCES = apex.F90 shr_kind_mod.F90 geogrid_t3d.F90 params.F90 timing.F90 util.F90 geogrid.F90 maggrid.F90 namelist.F90 my_mpi.F90 read_ncfile.F90 fields.F90 getapex.F90 my_esmf.F90 output.F90 addfld_mod.F90 solve.F90 mud.F mudcom.F mudmod.F muh2cr.F heelis.F90 edynamo.F90 driver.F90 main.for Dynamosimulation.for GCMsimulation.for TIME3Dgrid.f TIME3DinitialCondition.for TIME3Dmain.for

OBJS      := $(addsuffix .o, $(basename $(SOURCES)))
#
EXEC = time3d

$(EXEC): $(OBJS) $(MACHINES)
	$(FC) -o $@ $(OBJS) $(LIBS) $(LDFLAGS)

LIB_NETCDF = /home/tgcm/intel/netcdf-4.1.1/lib
INC_NETCDF = /home/tgcm/intel/netcdf-4.1.1/include
LIB_ESMF   = /home/tgcm/esmf/ESMF_5_2_0rp1_beta_snapshot_21/lib/libO/Linux.intel.64.intelmpi.hao
include $(LIB_ESMF)/esmf.mk
LIBS     = -lcurl -L$(LIB_NETCDF) -lnetcdf -L$(LIB_ESMF) -lesmf
LDFLAGS    += $(ESMF_F90LINKOPTS) $(ESMF_F90LINKPATHS) $(ESMF_F90LINKRPATHS)
LDFLAGS    += $(ESMF_F90ESMFLINKLIBS)

my_esmf.o: my_esmf.F90
	$(ESMF_F90COMPILER) -c $(ESMF_F90COMPILEOPTS) $(ESMF_F90COMPILEPATHS) \
	$(ESMF_F90COMPILECPPFLAGS) $(CPPFLAGS) $(FFLAGS) $<
my_mpi.o: my_mpi.F90
	$(ESMF_F90COMPILER) -c $(ESMF_F90COMPILEOPTS) $(ESMF_F90COMPILEPATHS) \
	$(ESMF_F90COMPILECPPFLAGS) $(CPPFLAGS) $(FFLAGS) $<
edynamo.o: edynamo.F90
	$(ESMF_F90COMPILER) -c $(ESMF_F90COMPILEOPTS) $(ESMF_F90COMPILEPATHS) \
	$(ESMF_F90COMPILECPPFLAGS) $(CPPFLAGS) $(FFLAGS) $<
util.o: util.F90
	$(ESMF_F90COMPILER) -c $(ESMF_F90COMPILEOPTS) $(ESMF_F90COMPILEPATHS) \
	$(ESMF_F90COMPILECPPFLAGS) $(CPPFLAGS) $(FFLAGS) $<
apex.o: apex.F90
	$(MPIF90) $(FFLAGS) $(REAL8) -c  -o $@ $<

$(MACHINES): export HN=$(HOST)
$(MACHINES): export NP=$(NPROC)
$(MACHINES): FORCE
	@echo "Making $(MACHINES)"
	@echo `hostname` > $(MACHINES)
	@awk 'BEGIN{ for (i=2; i <= ENVIRON["NP"]; i++) print ENVIRON["HN"] }' >> $(MACHINES)
FORCE:


clean:
	rm -f *.o *.mod $(EXEC)
