# Makefile for compilation of MBM coupled to Medusa

.KEEP_STATE:

.SUFFIXES:

.SUFFIXES: .F .f .f90 .F90 .o

# First define some useful things like
RM = /bin/rm -f
MV = /bin/mv -f
CP = /bin/cp
LNSYM = /bin/ln -s
MKDIR = /bin/mkdir -p

SRCDIR_MED   := ../src-med
XMLLIST_DEFAULT  := $(abspath list_medmbm.xml)
XMLLIST_CALC_PT  := $(abspath list_medmbm_calc_pt.xml)
INCDIR_LOC   := $(abspath include)
PWDIR_LOC    := $(abspath .)


###########################################
### Guita: Debian Squeeze with gfortran ###
###########################################
FC = gfortran
FPP = cpp -E
FFLAGS = -O -fmax-errors=5
INCLFLAGS = -I./modmedusa -I.
LDFLAG_MEDUSA = -L. -lmedusa
LDFLAG_THDYCT = -L../../libthdyct -lthdyct
LDFLAG_NETCDF = -L/usr/lib -lnetcdf -lnetcdff

LDFLAGS = $(LDFLAG_MEDUSA)  $(LDFLAG_NETCDF)  $(LDFLAG_THDYCT)


OPTIONDEFS = -DCALENDAR_365DAYS  \
             -DMEDUSA_BASE2D -DORDER2D_COLUMNMAJOR \
             -DSAVE_COLUMN_BYCALLER\
             -DLOST_ORGMATTER_VOL -DLOOP_ORGMATTER \
             -DMBM_WITH_NETCDF

OBJCOMMON = mod_generalparams.o mod_mbm_geometry.o mod_mbm-medusa_xsetup.o \
      mod_mbm_options.o mod_mbm_conbio.o mod_logunits.o \
      mod_mbm_materialparams.o mod_mbm_info.o mod_mbm_files.o mod_mbm_tempo.o \
      mod_mbm_ncforcing.o mod_mbm_paleod.o mod_mbm_biocarbonates.o mod_mbm_eqnoce_txt.o \
      mod_mbm_biocts.o mod_mbm_other.o mod_mbm_wfluxes.o mod_mbm_contiweathering.o \
      mod_mbm_shelffluxes.o mod_mbm_chimiq.o \
      mbmcfg.o activy.o advect.o contiw.o corals.o initia.o \
      setgeo.o setwfl.o toto2.o

OBJMEDMBM = mod_mbm_medusa_setup.o store_nc_aux.o mod_files_medusa.o \
      mod_mbm_medusa_o2s.o mod_mbm_medusa_s2o.o \
      mbm-medusa.o dorpri-medusa.o\
      eqnsed-medusa.o eqnoce_orgm_powerlaw.o \
      eqnoce_orgm_distribution.o eqnoce_carb_distribution.o \
      eqnoce_xprt_straighttoseafloor.o eqnoce-medusa.o \
      secmem-medusa.o 

TIMESTAMP := $(shell date +%Y%m%d%H%M%S)

###############  You need not to change anything below  ###############


OBJFILES = $(OBJCOMMON) $(OBJMEDMBM)

medmbm_default : XMLLIST_MCG := $(XMLLIST_DEFAULT)
medmbm_default : medmbm

medmbm_calc_pt : XMLLIST_MCG := $(XMLLIST_CALC_PT)
medmbm_calc_pt : OPTIONDEFS += -DWITH_CALC_PT
medmbm_calc_pt : medmbm_pt

medmbm medmbm_pt : libmedusa.a $(OBJFILES)
	$(FC) $(OPTIONDEFS) $(FFLAGS) $(INCLFLAGS) $(OBJFILES) \
	$(LDFLAGS) -o $@.$(TIMESTAMP)
	$(MV) $@.$(TIMESTAMP) ../work/mbm

libmedusa.a:
	(cd -P $(SRCDIR_MED); \
	 make codegen "XMLLIST_MCG = $(XMLLIST_MCG)" "OPTIONDEFS = $(OPTIONDEFS)"; \
	 $(LNSYM) $(INCDIR_LOC)/solvsed_onestep_its_solut.F gen/include/solvsed_onestep_its_solut.F; \
	 $(LNSYM) $(INCDIR_LOC)/solvsedLossConversions.F gen/include/solvsedLossConversions.F; \
	 $(LNSYM) $(PWDIR_LOC)/mod_seafloor_wdata.F mod_seafloor_wdata.F; \
	 make libmedusa.a "OPTIONDEFS = $(OPTIONDEFS)")
	$(MV) $(SRCDIR_MED)/libmedusa.a .
	$(MKDIR) modmedusa
	$(CP) $(SRCDIR_MED)/*.mod modmedusa
	$(CP) $(SRCDIR_MED)/gen/lib/*.mod modmedusa



.f.o:;
	$(FC) $(OPTIONDEFS) -c $(FFLAGS) $(INCLFLAGS) $*.f -o $*.o

.f90.o:;
	$(FC) $(OPTIONDEFS) -c $(FFLAGS) $(INCLFLAGS) $*.f90 -o $*.o

.F.o:;
	$(FC) $(OPTIONDEFS) -DTIMESTAMP="'$(TIMESTAMP)'" \
	-c $(FFLAGS) $(INCLFLAGS) $*.F -o $*.o

.F90.o:;
	$(FC) $(OPTIONDEFS) -DTIMESTAMP="'$(TIMESTAMP)'" \
	-c $(FFLAGS) $(INCLFLAGS) $*.F90 -o $*.o


clean :
	$(RM) *.o *.mod


tidy : clean
	$(RM) libmedusa.a
	$(RM) -r modmedusa
	$(RM) *% *~ ~* *.log *.bak
