FC=gfortran
FCFLAGS = -O2 -Wall -fbounds-check
SRCDIR = ../../src

all: test_fieldlines rcm_test

clean: clean-generic clean-test_fieldlines clean-rcm_test

mhd-modules.for: $(SRCDIR)/mhd-modules.for
	fppn -- $^ > $@

mhd-modules.o:mhd-modules.for
	$(FC) $(FCFLAGS) -c -o $@ $^

new_cotr.for: $(SRCDIR)/new_cotr.for
	cp $^ $@

new_cotr.o: new_cotr.for
	$(FC) $(FCFLAGS) -c -o $@ $^

mhd-cotr.for: $(SRCDIR)/mhd-cotr.for
	cp $^ $@

mhd-cotr.o: mhd-cotr.for
	$(FC) $(FCFLAGS) -c -o $@ $^

mhd-fltrace.for: $(SRCDIR)/mhd-fltrace.for
	fppn $^
	mv $(SRCDIR)/mhd-fltrace.ff $@

mhd-fltrace.o: mhd-fltrace.for mhd-modules.o new_cotr.o 
	$(FC) $(FCFLAGS) -c -o $@ $<

glob-util.for: $(SRCDIR)/glob-util.for
	cp $^ $@

glob-util.o:glob-util.for
	$(FC) $(FCFLAGS) -c -o $@ $<

clean-generic: 
	-rm mhd-modules.o
	-rm mhd-modules.for
	-rm new_cotr.for
	-rm new_cotr.o
	-rm mhd-cotr.for
	-rm mhd-cotr.o
	-rm mhd-fltrace.o
	-rm mhd-fltrace.for
	-rm glob-util.for
	-rm glob-util.o
	-rm *.mod
	-rm *.dat


# ======================================================
test_fieldlines:test_fieldlines.o mhd-modules.o new_cotr.o mhd-fltrace.o 
	$(FC) $(FCFLAGS) -o $@ $^

test_fieldlines.o:test.f90 dipole_field.F90 mhd-modules.o new_cotr.o mhd-fltrace.o
	$(FC) $(FCFLAGS) -c -o $@ $<

clean-test_fieldlines:
	-rm test_fieldlines
	-rm test_fieldlines.o

# ======================================================
RCM_DIR = ../../target-build/rcm
rice_SOURCES_f90 = $(RCM_DIR)/claw.f90 \
                   $(RCM_DIR)/erf.f90 \
                   $(RCM_DIR)/rcm_subs.f90 \
                   $(RCM_DIR)/rcm_make_a_step.f90 \
                   $(RCM_DIR)/utils.f90 \
                   $(RCM_DIR)/read_alam.f90 
rice_OBJECTS_f90 = $(rice_SOURCES_f90:%.f90=%.o)

rice_SOURCES_f77 = $(RCM_DIR)/rcmu_out.f \
                   $(RCM_DIR)/sub_torcmmc_openggcm.f
rice_OBJECTS_f77 = $(rice_SOURCES_f77:%.f=%.o)

RICE_FCFLAGS = -O2

%.o:%.f90
	$(FC) $(RICE_FCFLAGS) -c -o $@ $<

%.o:%.f
	$(FC) $(RICE_FCFLAGS) -c -o $@ $<


rice_files:  $(rice_OBJECTS_f90) $(rice_OBJECTS_f77)

rcm_test_OBJECTS = rcm_test.o \
                   rcm-fieldlines.o \
                   rcm-fieldlines.o \
                   glob-util.o \
                   mhd-cotr.o \
                   mhd-fltrace.o \
                   new_cotr.o \
                   mhd-modules.o \
                   hash_constants.o \
                   old-tracer.o \
                   $(rice_OBJECTS_f90) $(rice_OBJECTS_f77)

rcm_test: $(rcm_test_OBJECTS)
	$(FC) $(FCFLAGS) -o $@ $^

rcm_test.o: rcm_test.f90 hash_constants.o rice_files rcm-fieldlines.o 
	$(FC) $(FCFLAGS) -c -o $@ $<


rcm-fieldlines.for: $(SRCDIR)/mhd-rcm.for makefile
	echo "#ISPHERE=2.7\n" > tmp1.for
	echo "#rcm_iono=120.0\n" >> tmp1.for
	echo "#rcm_fb_precon=0\n" >> tmp1.for
	echo ".set rcmcode=rice\n" >> tmp1.for
	echo "#rcm_idt1=60.0\n" >> tmp1.for
	echo "#gamma=1.66667\n" >> tmp1.for

	sed -n '/subroutine inp2d1/,/^\s*end\s*$$/p' $(SRCDIR)/mhd-corea.for >> tmp1.for
	sed -n '/module rcm_geo/,/end module rcm_geo/p' $< >> tmp1.for
	sed -n '/module rcm_fieldline_tracer/,/end module rcm_fieldline_tracer/p' $< >> tmp1.for
	sed -n '/c start RCM IO/,/c end RCM IO/p' $< >> tmp1.for
	sed -n '/c RICE INTERFACE/,/c END RICE INTERFACE/p' $< >> tmp1.for
	sed -n '/subroutine stupid_copy_file/,/end subroutine stupid_copy_file/p' $< >> tmp1.for
	sed -n '/subroutine read_rcm_exch_dump/,/end subroutine read_rcm_exch_dump/p' $< >> tmp1.for
	sed -n '/subroutine rcm_mhd_io_int/,/end subroutine rcm_mhd_io_int/p' $< >> tmp1.for
	sed -n '/subroutine rcm_ipol2a/,/end subroutine rcm_ipol2a/p' $< >> tmp1.for
	sed -n '/subroutine index_in_1d_arr/,/end subroutine index_in_1d_arr/p' $< >> tmp1.for

	fppn -- tmp1.for > $@
	-rm tmp1.for

hash_constants.o: hash_constants.f
	$(FC) $(FCFLAGS) -c -o $@ $<

old-tracer.o: old_tracer.f hash_constants.o
	fppn $<
	mv old_tracer.ff old-tracer.for
	$(FC) $(FCFLAGS) -c -o $@ old-tracer.for
	rm old-tracer.for

rcm-fieldlines.o: rcm-fieldlines.for new_cotr.o mhd-modules.o mhd-fltrace.o
	$(FC) $(FCFLAGS) -c -o $@ $<

clean-rcm_test:
	-rm rcm-fieldlines.for
	-rm rcm-fieldlines.o
	-rm hash_constants.o
	-rm $(rice_OBJECTS_f90) $(rice_OBJECTS_f77)
	-rm rcm_test.o
	-rm rcm_test
	-rm old-tracer.o
