#

LN      =       ln -sf
MAKE    =       make -i -r
RM      =       rm -f

include ../configure.wrf

MODULES =       module_driver_constants.o module_model_constants.o  \
                module_domain.o module_integrate.o \
                module_timing.o module_configure.o module_start.o \
                module_big_step_utilities.o \
                module_small_step.o \
                module_tiles.o  \
                module_machine.o module_state_description.o module_bc.o module_sm.o \
                module_nesting.o module_solvedebug.o module_microphysics.o module_mp_kessler.o \
		module_mp_ncloud3.o \
                module_advect.o module_rk.o module_io_domain.o module_wrf_error.o \
		module_ra_sw.o module_ra_rrtm.o \
		module_bl_sfclay.o module_bl_slab.o module_bl_mrf.o \
		module_cu_kf.o module_cu_bmj.o \
		module_mp_lin.o \
                module_io_mm5.o \
                module_io_wrf.o \
                module_date_time.o \
                module_ext_io.o \
                module_dm.o module_diffusion.o \
		module_ra_gsfcsw.o \
                $(EXTRAMODULES)

OBJS    =       solve_interface.o solve_rk.o \
                init_modules.o ext_io.o wrf_mem_copy.o wrf_shutdown.o \
		add_config_info_to_grid.o \
		microphysics_driver.o cumulus_driver.o pbl_driver.o radiation_driver.o \
                wrf_num_bytes_between.o

TESTS        =       ./Makefile ../Makefile ../configure.wrf

WRF          =	     $(TESTS) wrf.exe ideal.exe
SQUALL2D_X   =       $(TESTS) wrf.exe ideal_squall2d_x.exe
SQUALL2D_Y   =       $(TESTS) wrf.exe ideal_squall2d_y.exe
QUARTER_SS   =       $(TESTS) wrf.exe ideal_quarter_ss.exe
B_WAVE       =       $(TESTS) wrf.exe ideal_b_wave.exe
HILL2D_X     =       $(TESTS) wrf.exe ideal_hill2d_x.exe
REAL         =       $(TESTS) wrf.exe real.exe


wrf:                    $(WRF)
squall2d_x:		$(SQUALL2D_X)
squall2d_y:		$(SQUALL2D_Y)
quarter_ss:		$(QUARTER_SS)
b_wave:		        $(B_WAVE)
hill2d_x:		$(HILL2D_X)
real:			$(REAL)

wrf.exe: wrf.o $(OBJS) $(MODULES) module_initialize.o
		$(FC) -o $@ $(LDFLAGS) wrf.o $(OBJS) $(MODULES) module_initialize.o $(LIB)

ideal.exe: ideal.o $(OBJS) $(MODULES) module_initialize.o
		$(FC) -o $@ $(LDFLAGS) ideal.o $(OBJS) $(MODULES) module_initialize.o $(LIB)

ideal_squall2d_x.exe: ideal.o $(OBJS) $(MODULES) module_initialize_squall2d_x.o
		$(FC) -o $@ $(LDFLAGS) ideal.o $(OBJS) $(MODULES) module_initialize_squall2d_x.o $(LIB)
ideal_squall2d_y.exe: ideal.o $(OBJS) $(MODULES) module_initialize_squall2d_y.o
		$(FC) -o $@ $(LDFLAGS) ideal.o $(OBJS) $(MODULES) module_initialize_squall2d_y.o $(LIB)
ideal_quarter_ss.exe: ideal.o $(OBJS) $(MODULES) module_initialize_quarter_ss.o
		$(FC) -o $@ $(LDFLAGS) ideal.o $(OBJS) $(MODULES) module_initialize_quarter_ss.o $(LIB)
ideal_b_wave.exe: ideal.o $(OBJS) $(MODULES) module_initialize_b_wave.o
		$(FC) -o $@ $(LDFLAGS) ideal.o $(OBJS) $(MODULES) module_initialize_b_wave.o $(LIB)
ideal_hill2d_x.exe: ideal.o $(OBJS) $(MODULES) module_initialize_hill2d_x.o
		$(FC) -o $@ $(LDFLAGS) ideal.o $(OBJS) $(MODULES) module_initialize_hill2d_x.o $(LIB)
real.exe: real.o $(OBJS) $(MODULES) module_initialize_real.o module_si_io.o
		$(FC) -o $@ $(LDFLAGS) real.o $(OBJS) $(MODULES) module_initialize_real.o module_si_io.o $(LIB)


ext_io.o :
	$(CC) -c $(CFLAGS) ext_io.c

wrf_num_bytes_between.o :
	$(CC) -c $(CFLAGS) wrf_num_bytes_between.c

clean:
	@ echo 'use the clean script'

module_state_description.F :
		( cd .. ; $(PERL) -Itools tools/use_registry $(ARCHFLAGS) Registry/$(REGISTRY) )

# DEPENDENCIES : only dependencies after this line (don't remove the word DEPENDENCIES)

module_state_description.o : module_state_description.F

wrf.o: module_domain.o module_timing.o module_driver_constants.o module_integrate.o \
		module_start.o module_configure.o \
                module_machine.o \
		module_state_description.o \
		module_bc.o $(EXTRAMODULES) \
                module_wrf_error.o wrf_shutdown.o module_dm.o

ideal.o: module_domain.o module_timing.o module_driver_constants.o \
		module_initialize.o module_configure.o \
                module_machine.o module_io_domain.o \
		module_state_description.o \
		module_bc.o $(EXTRAMODULES) \
                module_wrf_error.o wrf_shutdown.o

real.o: module_domain.o module_timing.o module_driver_constants.o \
		module_initialize_real.o module_configure.o \
		module_machine.o module_io_domain.o \
		module_state_description.o \
		module_bc.o $(EXTRAMODULES) \
		module_wrf_error.o wrf_shutdown.o module_si_io.o

module_integrate.o: module_domain.o module_start.o \
		module_timing.o module_driver_constants.o \
		module_state_description.o \
		module_bc.o module_io_domain.o \
		module_nesting.o \
                module_wrf_error.o

solve_interface.o: module_domain.o \
		module_driver_constants.o module_timing.o \
		module_state_description.o \
		solve.int \
                module_wrf_error.o

solve_rk.o: module_domain.o module_driver_constants.o module_model_constants.o module_microphysics.o \
		module_small_step.o module_rk.o \
		module_state_description.o module_sm.o \
		module_bc.o \
		module_solvedebug.o \
		module_tiles.o \
		module_machine.o \
                module_wrf_error.o \
		module_diffusion.o

add_config_info_to_grid.o: module_domain.o module_configure.o

module_big_step_utilities.o: module_model_constants.o  \
                module_domain.o module_configure.o \
		module_state_description.o

module_rk.o: module_model_constants.o module_domain.o module_bc.o \
                module_big_step_utilities.o module_advect.o \
		module_state_description.o \
		module_wrf_error.o 


module_small_step.o: module_model_constants.o module_domain.o \
                module_configure.o \
                module_wrf_error.o

module_microphysics.o: module_bc.o \
		module_big_step_utilities.o \
                module_wrf_error.o

module_advect.o: module_bc.o module_model_constants.o \
                module_wrf_error.o

module_driver_constants.o: \
		module_state_description.o \
                module_wrf_error.o

module_domain.o: module_driver_constants.o \
		module_machine.o  \
		module_state_description.o \
                module_wrf_error.o

module_initialize.o: module_domain.o \
		module_state_description.o \
		module_model_constants.o \
                module_dm.o \
		module_bc.o \
                module_configure.o \
                module_wrf_error.o 

module_initialize_real.o: module_domain.o \
		module_state_description.o \
		module_model_constants.o \
		module_dm.o \
		module_bc.o \
		module_configure.o \
		module_wrf_error.o \
		module_si_io.o \
		module_date_time.o

module_start.o: module_domain.o \
                module_state_description.o \
		module_model_constants.o \
                module_dm.o \
                module_bc.o \
                module_configure.o \
                module_wrf_error.o \
                module_ra_rrtm.o module_ra_sw.o \
		module_ra_gsfcsw.o \
                module_bl_sfclay.o module_bl_slab.o \
                module_bl_mrf.o \
                module_cu_kf.o \
                module_date_time.o \
		module_cu_bmj.o \
		module_mp_ncloud3.o

module_timing.o: \
		module_state_description.o \
                module_wrf_error.o

module_configure.o: \
                module_domain.o \
		module_state_description.o \
                module_wrf_error.o

module_io_domain.o: module_ext_io.o module_io_mm5.o module_io_wrf.o module_configure.o

module_sm.o: \
		module_state_description.o \
                module_wrf_error.o

module_dm.o: module_machine.o module_state_description.o module_wrf_error.o

module_machine.o: module_driver_constants.o

module_bc.o: module_configure.o module_wrf_error.o

module_wrf_error.o: wrf_shutdown.o 

radiation_driver.o: module_bc.o \
		module_state_description.o module_model_constants.o \
		module_ra_sw.o module_ra_rrtm.o \
		module_ra_gsfcsw.o \
		./Makefile ../Makefile

pbl_driver.o: module_bc.o \
		module_model_constants.o \
		module_state_description.o \
		module_bl_sfclay.o module_bl_slab.o module_bl_mrf.o \
		./Makefile ../Makefile

cumulus_driver.o: module_bc.o module_state_description.o module_cu_kf.o \
		module_cu_bmj.o \
		module_model_constants.o \
		./Makefile ../Makefile

module_cu_kf.o: module_wrf_error.o

microphysics_driver.o: module_bc.o module_state_description.o \
                module_model_constants.o \
                module_mp_kessler.o module_mp_lin.o \
		module_mp_ncloud3.o

module_ra_rrtm.o: \
		./Makefile ../Makefile

module_diffusion.o: module_bc.o module_configure.o module_state_description.o \
		module_big_step_utilities.o module_model_constants.o \
                module_wrf_error.o

module_io_mm5.o: module_wrf_error.o module_configure.o module_domain.o module_date_time.o

module_io_wrf.o: module_wrf_error.o module_configure.o module_domain.o module_date_time.o

module_date_time.o: module_wrf_error.o

module_mp_lin.o : module_wrf_error.o

