#!/bin/bash
##################################
# Options for the FORTRAN compiler
##################################
FC    = ifort
FLAGS =  -O2 -fpp -W0  -assume byterecl
FCOPTK = -O2 -fpp -W0  -assume byterecl
FCOPTS = -O2 -fpp -W0  -assume byterecl
OUTPUT = solarj
#
###########################################
# Source, module and object names and paths
########################################### 
 MPATH = rrtmg_modules
 CPATH = rrtmg_src
 JPATH = fjx_src
 CDOTO = fjx_rrtmg_obj
#rrtmg 
 MPRK = parkind
 MPAR = parrrsw
 MCON = rrsw_con
 MK16 = rrsw_kg16
 MK17 = rrsw_kg17
 MK18 = rrsw_kg18
 MK19 = rrsw_kg19
 MK20 = rrsw_kg20
 MK21 = rrsw_kg21
 MK22 = rrsw_kg22
 MK23 = rrsw_kg23
 MK24 = rrsw_kg24
 MK25 = rrsw_kg25
 MK26 = rrsw_kg26
 MK27 = rrsw_kg27
 MK28 = rrsw_kg28
 MK29 = rrsw_kg29
 MREF = rrsw_ref
 MVSN = rrsw_vsn
 MWVN = rrsw_wvn
 MINT = rrsw_fastj_cmn

 CINI = rrtmg_sw_init
 CKGS = rrtmg_sw_k_g
 CSET = rrtmg_sw_setcoef
 CTAU = rrtmg_sw_taumol
 CDRI = rrtmg_sw_inp

#fast-J
 NCMN = fjx_cmn_mod
 DINI = fjx_init_mod
 DRED = fjx_sub_mod
 DCLD = cld_sub_mod
 DDRI = fjx72
#
 OBJC =   $(CDOTO)/$(CKGS).o \
         $(CDOTO)/$(CSET).o \
         $(CDOTO)/$(CINI).o \
         $(CDOTO)/$(CTAU).o \
         $(CDOTO)/$(CDRI).o 
#
 OBJM =   $(CDOTO)/$(MPRK).o \
         $(CDOTO)/$(MPAR).o \
         $(CDOTO)/$(MCON).o \
         $(CDOTO)/$(MK16).o \
         $(CDOTO)/$(MK17).o \
         $(CDOTO)/$(MK18).o \
         $(CDOTO)/$(MK19).o \
         $(CDOTO)/$(MK20).o \
         $(CDOTO)/$(MK21).o \
         $(CDOTO)/$(MK22).o \
         $(CDOTO)/$(MK23).o \
         $(CDOTO)/$(MK24).o \
         $(CDOTO)/$(MK25).o \
         $(CDOTO)/$(MK26).o \
         $(CDOTO)/$(MK27).o \
         $(CDOTO)/$(MK28).o \
         $(CDOTO)/$(MK29).o \
         $(CDOTO)/$(MREF).o \
         $(CDOTO)/$(MVSN).o \
         $(CDOTO)/$(MWVN).o \
         $(CDOTO)/$(MINT).o \
         $(CDOTO)/$(NCMN).o 

OBJJ =   $(CDOTO)/$(DRED).o \
         $(CDOTO)/$(DINI).o \
         $(CDOTO)/$(DCLD).o \
         $(CDOTO)/$(DDRI).o 
 

#################
# Executable name
#################

$(OUTPUT) : $(OBJM) $(OBJC) $(OBJJ)
	$(FC) $(FLAGS) -I$(CDOTO) -o $(OUTPUT) $(OBJM) $(OBJC) $(OBJJ)

#################
# Compile modules
#################

$(CDOTO)/$(NCMN).o : $(JPATH)/$(NCMN).f90
	$(FC) $(FCOPTK) -I$(CDOTO) -c $(JPATH)/$(NCMN).f90
	\mv $(NCMN).o *.mod $(CDOTO)

$(CDOTO)/$(MPRK).o: $(MPATH)/$(MPRK).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MPRK).f90
	\mv $(MPRK).o *.mod $(CDOTO)

$(CDOTO)/$(MPAR).o : $(MPATH)/$(MPAR).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MPAR).f90
	\mv $(MPAR).o *.mod $(CDOTO)

$(CDOTO)/$(MCON).o : $(MPATH)/$(MCON).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MCON).f90
	\mv $(MCON).o *.mod $(CDOTO)

$(CDOTO)/$(MK16).o : $(MPATH)/$(MK16).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK16).f90
	\mv $(MK16).o *.mod $(CDOTO)

$(CDOTO)/$(MK17).o : $(MPATH)/$(MK17).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK17).f90
	\mv $(MK17).o *.mod $(CDOTO)

$(CDOTO)/$(MK18).o : $(MPATH)/$(MK18).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK18).f90
	\mv $(MK18).o *.mod $(CDOTO)

$(CDOTO)/$(MK19).o : $(MPATH)/$(MK19).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK19).f90
	\mv $(MK19).o *.mod $(CDOTO)

$(CDOTO)/$(MK20).o : $(MPATH)/$(MK20).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK20).f90
	\mv $(MK20).o *.mod $(CDOTO)

$(CDOTO)/$(MK21).o : $(MPATH)/$(MK21).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK21).f90
	\mv $(MK21).o *.mod $(CDOTO)

$(CDOTO)/$(MK22).o : $(MPATH)/$(MK22).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK22).f90
	\mv $(MK22).o *.mod $(CDOTO)

$(CDOTO)/$(MK23).o : $(MPATH)/$(MK23).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK23).f90
	\mv $(MK23).o *.mod $(CDOTO)

$(CDOTO)/$(MK24).o : $(MPATH)/$(MK24).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK24).f90
	\mv $(MK24).o *.mod $(CDOTO)

$(CDOTO)/$(MK25).o : $(MPATH)/$(MK25).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK25).f90
	\mv $(MK25).o *.mod $(CDOTO)

$(CDOTO)/$(MK26).o : $(MPATH)/$(MK26).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK26).f90
	\mv $(MK26).o *.mod $(CDOTO)

$(CDOTO)/$(MK27).o : $(MPATH)/$(MK27).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK27).f90
	\mv $(MK27).o *.mod $(CDOTO)

$(CDOTO)/$(MK28).o : $(MPATH)/$(MK28).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK28).f90
	\mv $(MK28).o *.mod $(CDOTO)

$(CDOTO)/$(MK29).o : $(MPATH)/$(MK29).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MK29).f90
	\mv $(MK29).o *.mod $(CDOTO)

$(CDOTO)/$(MREF).o : $(MPATH)/$(MREF).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MREF).f90
	\mv $(MREF).o *.mod $(CDOTO)

$(CDOTO)/$(MVSN).o : $(MPATH)/$(MVSN).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MVSN).f90
	\mv $(MVSN).o *.mod $(CDOTO)

$(CDOTO)/$(MINT).o : $(MPATH)/$(MINT).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MINT).f90
	\mv $(MINT).o *.mod $(CDOTO)

$(CDOTO)/$(MWVN).o : $(MPATH)/$(MWVN).f90
	$(FC) $(FCOPTS) -I$(CDOTO) -c $(MPATH)/$(MWVN).f90
	\mv $(MWVN).o *.mod $(CDOTO)

#################
# Compile source
#################

$(CDOTO)/$(CKGS).o : $(CPATH)/$(CKGS).f90
	$(FC) $(FCOPTK) -I$(CDOTO) -c $(CPATH)/$(CKGS).f90
	\mv $(CKGS).o $(CDOTO)

$(CDOTO)/$(CSET).o : $(CPATH)/$(CSET).f90
	$(FC) $(FCOPTK) -I$(CDOTO) -c $(CPATH)/$(CSET).f90
	\mv $(CSET).o *.mod $(CDOTO)

$(CDOTO)/$(CINI).o : $(CPATH)/$(CINI).f90
	$(FC) $(FCOPTK) -I$(CDOTO) -c $(CPATH)/$(CINI).f90
	\mv $(CINI).o $(CDOTO)

$(CDOTO)/$(CTAU).o : $(CPATH)/$(CTAU).f90
	$(FC) $(FCOPTK) -I$(CDOTO) -c $(CPATH)/$(CTAU).f90
	\mv $(CTAU).o *.mod $(CDOTO)

$(CDOTO)/$(CDRI).o : $(CPATH)/$(CDRI).f90
	$(FC) $(FCOPTK) -I$(CDOTO) -c $(CPATH)/$(CDRI).f90
	\mv $(CDRI).o $(CDOTO)

$(CDOTO)/$(DINI).o : $(JPATH)/$(DINI).f90
	$(FC) $(FCOPTK) -I$(CDOTO) -c $(JPATH)/$(DINI).f90
	\mv $(DINI).o $(DINI).mod $(CDOTO)

$(CDOTO)/$(DRED).o : $(JPATH)/$(DRED).f90
	$(FC) $(FCOPTK) -I$(CDOTO) -c $(JPATH)/$(DRED).f90
	\mv $(DRED).o $(DRED).mod $(CDOTO)

$(CDOTO)/$(DCLD).o : $(JPATH)/$(DCLD).f90
	$(FC) $(FCOPTK) -I$(CDOTO) -c $(JPATH)/$(DCLD).f90
	\mv $(DCLD).o $(DCLD).mod $(CDOTO)

$(CDOTO)/$(DDRI).o : $(JPATH)/$(DDRI).f90
	$(FC) $(FCOPTK) -I$(CDOTO) -c $(JPATH)/$(DDRI).f90
	\mv $(DDRI).o $(CDOTO)
###########
# make makedir
############
makedir :
	if [ ! -d $(CDOTO) ] ; then \
	mkdir $(CDOTO) ; \
	fi
###################
# Intro information
###################
intro :
	echo
	echo '-----------------'
	echo '  $(OUTPUT) makefile'
	echo '-----------------'
	echo
	echo 'This makefile was designed for the $(PLATFORM) platform.'
	echo
	echo 'It uses the $(FC) compiler, with the following options:'
	echo '      $(FCOPTS)'
	echo 'except for the absorption coefficient data file which is'
	echo 'compiled without optimization (-O0) to improve compile time.'
	echo
	echo 'The object files used are as follows:'
	echo
	echo '      $(OBJM) $(OBJC) $(OBJJ) '
	echo
	echo
	echo '$(OUTPUT) make is in progress ...'
	echo

###############################
# Concluding information
###############################

conclude :

	echo
	echo '================='
	echo '  makefile done  '
	echo '================='
	echo

#------------------------ Cleaning -----------------------------------

clean :
	$(RM) fastjx *.o *.mod core $(CDOTO)/*.o $(CDOTO)/*.mod





