#     path:      $HeadURL$
#     author:    $Author$
#     revision:  $Revision$
#     created:   $Date$
#
# Makefile for lblrtm
# From lblrtm/build directory, type: gmake -f make_lblrtm <TARGET>

# Include file containing user input. Directory is referenced to 
# parent directory and common build rules
include makefile.common

###############################
# Set variables/
###############################
#Set version name.  Used in the default OUTPUT and OBJPATH variables.  If you
# change those two variables from what is provided here, no need to set this variable.

PRODUCT = lblrtm
VERSION = v12.15

# Define makefile name
MAKEFILE=make_$(PRODUCT)
ifeq ($(wildcard ./addlibs.inc), ./addlibs.inc)
$(info "include  ./addlibs.inc" )
include  ./addlibs.inc
endif

$(info "NETCDF :: $(NETCDF)" )

# Set netcdf output if desired
ifndef NETCDF
NETCDF := no
ADDOUT := 
else
ADDOUT := _nc
endif

$(info "NETCDF   :: $(NETCDF)" )
$(info "FC       :: $(FC)" )
$(info "PRODUCT  :: $(PRODUCT)" )

# Set name of LBLRTM executable.  
OUTPUT = ${PRODUCT}_$(VERSION)_$(PLTFRM)_$(FC_TYPE)_$(P_TYPE)

# Set variables specific to LBLRTM compile
ifeq ($(P_TYPE),dbl)
     FFTEXT=_dbl
endif

# Set directory for object files.  
OBJPATH = ${PRODUCT}_$(VERSION)_$(PLTFRM)_$(FC_TYPE)_$(P_TYPE).obj

# Set directory containing source files, relative to directory from which
# you are executing the makefile
SRCPATH = ../src

# Files contained in src directory.  If additional .f90 files are added,
# add to this list and to build instruction. 
SRCS = lblrtm.f90 oprop.f90 contnm.f90 xmerge.f90 testmm.f90 \
lblatm.f90 lbllow.f90 postsub.f90 pltlbl.f90 \
lbldum.f90 solar.f90 nonlte.f90 fftscn$(FFTEXT).f90 $(UTIL_FILE) \
phys_consts.f90 planet_earth.f90 lblparams.f90 struct_types.f90 \
solar_cycle.f90 
ifeq ($(NETCDF),yes)
   SRCS +=  read_module.f90
   SRCS +=  mt_ckd_h2o_module.f90
   LIB_NETCDF = $(NCL)
   INC_NETCDF = $(NCI)
   LDFLAG = -L$(LIB_NETCDF) -lnetcdff -lnetcdf $(ADDLIB)
#   LDFLAG = $(LIB_NETCDF)/libnetcdff.a $(LIB_NETCDF)/libnetcdf.a $(ADDLIB)

   FCDF = -DUSENETCDF
else
   FCDF = 
endif
$(info "SRCS  :: $(SRCS)" )


# Object file names
OBJECTS = ${SRCS:.f90=.o}
UTIL_OBJ = $(UTIL_FILE:.f90=.o)



## Define dependancies
$(OBJPATH)/read_module.o:       $(SRCPATH)/read_module.f90
	$(FC) -c $(FCFLAG) -I$(SRCPATH) -I$(INC_NETCDF) $< -o $@

read_file.mod:  $(SRCPATH)/read_module.f90
	$(FC) -c $(FCFLAG) -I$(INC_NETCDF) $< -o $(OBJPATH)/read_module.o


$(OBJPATH)/mt_ckd_h2o_module.o:	$(SRCPATH)/mt_ckd_h2o_module.f90 read_file.mod 
	$(FC) -c $(FCDF)  $(FCFLAG) -I$(SRCPATH) $< -o $@

mt_ckd_h2o.mod:	$(SRCPATH)/mt_ckd_h2o_module.f90
	$(FC) -c $(FCFLAG)  $< -o $(OBJPATH)/mt_ckd_h2o_module.o
$(OBJPATH)/lblrtm.o:	$(SRCPATH)/lblrtm.f90 lblparams.mod phys_consts.mod 
	$(FC) -c $(FCDF)  $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/oprop.o:	$(SRCPATH)/oprop.f90 lblparams.mod phys_consts.mod struct_types.mod
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/contnm.o:	$(SRCPATH)/contnm.f90 lblparams.mod phys_consts.mod read_file.mod mt_ckd_h2o.mod
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/xmerge.o:	$(SRCPATH)/xmerge.f90 lblparams.mod phys_consts.mod
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/testmm.o:	$(SRCPATH)/testmm.f90 
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/lblatm.o:	$(SRCPATH)/lblatm.f90 phys_consts.mod planet_consts.mod lblparams.mod
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/lbllow.o:	$(SRCPATH)/lbllow.f90 phys_consts.mod planet_consts.mod lblparams.mod
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/postsub.o:	$(SRCPATH)/postsub.f90 lblparams.mod
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/pltlbl.o:	$(SRCPATH)/pltlbl.f90 phys_consts.mod
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/lbldum.o:	$(SRCPATH)/lbldum.f90
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/solar.o:	$(SRCPATH)/solar.f90 phys_consts.mod solar_cycle.mod
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/nonlte.o:	$(SRCPATH)/nonlte.f90 phys_consts.mod struct_types.mod lblparams.mod
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/fftscn.o:	$(SRCPATH)/fftscn.f90
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/fftscn_dbl.o:	$(SRCPATH)/fftscn_dbl.f90
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
$(OBJPATH)/$(UTIL_OBJ):	$(SRCPATH)/$(UTIL_FILE)
	$(FC) -c $(FCFLAG) -I$(SRCPATH) $< -o $@
lblparams.mod:	$(SRCPATH)/lblparams.f90
	$(FC) -c $(FCFLAG) $< -o $(OBJPATH)/lblparams.o
phys_consts.mod:	$(SRCPATH)/phys_consts.f90
	$(FC) -c $(FCFLAG) $< -o $(OBJPATH)/phys_consts.o
planet_consts.mod:	$(SRCPATH)/planet_earth.f90
	$(FC) -c $(FCFLAG) -I. $< -o $(OBJPATH)/planet_earth.o
struct_types.mod:	$(SRCPATH)/struct_types.f90
	$(FC) -c $(FCFLAG) $< -o $(OBJPATH)/struct_types.o
solar_cycle.mod:	$(SRCPATH)/solar_cycle.f90
	$(FC) -c $(FCFLAG) $< -o $(OBJPATH)/solar_cycle.o
$(OBJPATH)/lblparams.o:	$(SRCPATH)/lblparams.f90
	$(FC) -c $(FCFLAG) -I. $< -o $@
$(OBJPATH)/phys_consts.o:	$(SRCPATH)/phys_consts.f90
	$(FC) -c $(FCFLAG) $< -o $@
$(OBJPATH)/planet_earth.o:	$(SRCPATH)/planet_earth.f90  phys_consts.mod
	$(FC) -c $(FCFLAG) -I. $< -o $@
$(OBJPATH)/struct_types.o:	$(SRCPATH)/struct_types.f90
	$(FC) -c $(FCFLAG) -I. $< -o $@
$(OBJPATH)/solar_cycle.o:	$(SRCPATH)/solar_cycle.f90  
	$(FC) -c $(FCFLAG) -I. $< -o $@

ifeq ($(NETCDF),yes)
build : $(OBJPATH)/lblrtm.o $(OBJPATH)/oprop.o $(OBJPATH)/contnm.o $(OBJPATH)/xmerge.o $(OBJPATH)/testmm.o $(OBJPATH)/lblatm.o $(OBJPATH)/lbllow.o $(OBJPATH)/postsub.o  $(OBJPATH)/pltlbl.o $(OBJPATH)/lbldum.o $(OBJPATH)/solar.o $(OBJPATH)/nonlte.o $(OBJPATH)/fftscn$(FFTEXT).o  $(OBJPATH)/$(UTIL_OBJ) $(OBJPATH)/phys_consts.o $(OBJPATH)/planet_earth.o $(OBJPATH)/lblparams.o $(OBJPATH)/struct_types.o $(OBJPATH)/solar_cycle.o  $(OBJPATH)/read_module.o $(OBJPATH)/mt_ckd_h2o_module.o
	$(FC) $(FCFLAG) -o ../$(OUTPUT) $^  $(LDFLAG)
else
build : $(OBJPATH)/lblrtm.o $(OBJPATH)/oprop.o $(OBJPATH)/contnm.o $(OBJPATH)/xmerge.o $(OBJPATH)/testmm.o $(OBJPATH)/lblatm.o $(OBJPATH)/lbllow.o $(OBJPATH)/postsub.o  $(OBJPATH)/pltlbl.o $(OBJPATH)/lbldum.o $(OBJPATH)/solar.o $(OBJPATH)/nonlte.o $(OBJPATH)/fftscn$(FFTEXT).o  $(OBJPATH)/$(UTIL_OBJ) $(OBJPATH)/phys_consts.o $(OBJPATH)/planet_earth.o $(OBJPATH)/lblparams.o $(OBJPATH)/struct_types.o $(OBJPATH)/solar_cycle.o
	$(FC) $(FCFLAG) -o ../$(OUTPUT) $^
endif

