#
#  WARNING
#
#  THIS IS THE OLD V2 CONFIGURE DEFAULTS FILE, KEPT AROUND FOR REFERENCE
#  BUT IS NOT USED OR MAINTAINED AT ALL IN V3.  MOST OF THE COMMON SETTINGS
#  HAVE BEEN MOVED TO THE NEW V3 CONFIGURATION MECHANISM AND 
#  FILE: configure_new.defaults
#  SEVERAL OTHER SETS OF OPTIONS HAVE BEEN PRESERVED BUT MOVED INTO THE
#  FILE: configure_old.defaults.  
#
##########################################################
#ARCH	SGI 32 bit machine IRIX

FC		=	f90
SFC		=	$(FC)
LD		=	f90
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
FCDEBUG         =       # -g
FCBASEOPTS      =       -freeform -I. -w
FCFLAGS		=	$(FCBASEOPTS)
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS		=
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DLIMIT_ARGS $(DA_ARCHFLAGS)
LDFLAGS		=       CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP		=	/lib/cpp -C -P
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS	=	-I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =	$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share
AR              =       ar ru
M4              =       m4 -B14000
RANLIB          =       echo
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the SGI Fortran compiler complains about long source lines.      ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	make NETCDFPATH=CONFIGURE_NETCDF_PATH FC="$(FC) $(PROMOTION) -freeform -I." RANLIB="$(RANLIB)" CPP="$(CPP)" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" RANLIB="$(RANLIB)" CPP="$(CPP)" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" archive)

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_configure.o : module_configure.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_configure.o                                             \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o  start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90


###########################################################
#ARCH	SGI 32 bit machine, sycamore IRIX

FC		=	f90
SFC		=	$(FC)
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
FCDEBUG         =       # -g
FCBASEOPTS      =       -freeform -I. -w
FCFLAGS		=	-freeform -I. -w
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS		=
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem  \
                       	-I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -I$(WRF_SRC_ROOT_DIR)/inc
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG \
			$(DA_ARCHFLAGS) \
                        -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DLIMIT_ARGS 
LDFLAGS		=       CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP		=	/lib/cpp
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS	=	-I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =	$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share
AR              =       ar ru
M4              =       m4 -B14000
RANLIB          =       echo
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the SGI Fortran compiler complains about long source lines.      ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH FC="$(FC) $(PROMOTION) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" archive)

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_configure.o : module_configure.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_configure.o                                             \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH       SGI 64 bit machine IRIX64     (single-threaded, no nesting)

FC              =       f90
SFC		=	$(FC)
LD              =       f90
CC              =       cc
SCC		=	$(CC)
CFLAGS          =       -64 -DLANDREAD_STUB -DNCARIBM_NOC99
FCOPTIM         =       -O3
RWORDSIZE       =       CONFIGURE_RWORDSIZE
FCDEBUG         =       # -g
FCBASEOPTS      =       -freeform -I. -64 -cpp -OPT:Olimit=5269 $(FCDEBUG) -w
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
PROMOTION	=	-r$(RWORDSIZE) -i4
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG \
                        -DINTIO -DLIMIT_ARGS -DLANDREAD_STUB
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCOPTIM) -64 -OPT:Olimit=5269       CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B14000
RANLIB          =       echo
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the SGI Fortran compiler complains about long source lines.      ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH FC="$(FC) $(PROMOTION) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" RANLIB="$(RANLIB)" CPP="$(CPP)" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" archive)

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o  start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

module_configure.o : module_configure.F
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) -freeform -I. -64 -cpp -OPT:Olimit=5269 -w $(MODULE_DIRS) $*.f90

###########################################################
#ARCH	SGI O2K IRIX

FC              =       f90 -n32 -mips4 -w
SFC		=	$(FC)
LD              =       f90 -n32 -mips4 -w
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       -n32 -mips4
FCDEBUG         =       # -g
FCBASEOPTS      =       -freeform -I. -w
FCFLAGS         =       -freeform -I. -O3 -OPT:roundoff=3:IEEE_arithmetic=3 -OPT:fold_arith_limit=2001
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG \
			$(DA_ARCHFLAGS) \
                        -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share \
                        -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
AR              =       ar ru
M4              =       m4 -B14000
LDFLAGS         =       CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -C -P $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
RANLIB          =       echo
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the SGI Fortran compiler complains about long source lines.      ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" archive)

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_configure.o : module_configure.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_configure.o                                             \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH       SGI 64 bit machine IRIX64     (OpenMP, no nesting)

OMP             =       -mp
OMPCPP          =       -D_OPENMP
FC              =       f90
SFC		=	$(FC)
LD              =       f90
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       -64 -DLANDREAD_STUB -DNCARIBM_NOC99
FCOPTIM         =       -O3
FCDEBUG         =       # -g
FCBASEOPTS      =       -freeform -I. -64 -cpp -OPT:Olimit=5269 $(FCDEBUG) -w
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG \
                        -DINTIO -DLIMIT_ARGS -DLANDREAD_STUB
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH $(OMP) \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCOPTIM) -64 -OPT:Olimit=5269       CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B14000
RANLIB          =       echo
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the SGI Fortran compiler complains about long source lines.      ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" RANLIB="$(RANLIB)" CPP="$(CPP)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_configure.o : module_configure.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_configure.o                                             \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o  start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH	Sun  SunOS      (single-threaded, no nesting)
#
FC              =       f95
SFC		=	$(FC)
LD              =       f95
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS	=	`expr $(RWORDSIZE) \* 8`
PROMOTION	=	-xtypemap=real:$(RSIZEBITS),integer:32
CFLAGS          =	-DNCARIBM_NOC99
FCOPTIM		=	-O2 # -O4 -xlibmopt
FCDEBUG		=	#-g
FCBASEOPTS	=	-fnonstd -free -xpp=cpp $(FCDEBUG) -w
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem \
			-M$(WRF_SRC_ROOT_DIR)/external/io_netcdf -M$(WRF_SRC_ROOT_DIR)/external/io_int -M$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
			-M$(WRF_SRC_ROOT_DIR)/frame -M$(WRF_SRC_ROOT_DIR)/share -M$(WRF_SRC_ROOT_DIR)/phys -M$(WRF_SRC_ROOT_DIR)/inc -M$(WRF_SRC_ROOT_DIR)/chem \
			-M$(WRF_SRC_ROOT_DIR)/dyn_em 
ARCHFLAGS       =       $(COREDEFS) -DINTIO -DGRIB1 CONFIGURE_GRIB2_FLAG -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG \
			-DLIMIT_ARGS
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	$(FCOPTIM)       CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
#CPP            =       /opt/SUNWspro/bin/fpp
CPP             =       /usr/ccs/lib/cpp -C -P
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the Sun Fortran compiler complains about long source lines,      ####
#### usually due to cpp translating __FILE__ to a full pathname.              ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCBASEOPTS) " )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCBASEOPTS) -qarch=auto -qzerosize" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" FC="$(FC) $(PROMOTION) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" FC="$(SFC) $(PROMOTION) $(FCBASEOPTS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

solve_interface.o : solve_interface.F
	$(RM) $@
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.F > $*.f90
	$(FC) -c $(FCBASEOPTS) -I. $(PROMOTION) $(MODULE_DIRS) $*.f90

# compile these without high optimization to speed compile
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
wrf_bdyin.o : wrf_bdyin.F
wrf_bdyout.o : wrf_bdyout.F
wrf_histin.o : wrf_histin.F
wrf_histout.o : wrf_histout.F
wrf_inputin.o : wrf_inputin.F
wrf_inputout.o : wrf_inputout.F
wrf_restartin.o : wrf_restartin.F
wrf_restartout.o : wrf_restartout.F
module_configure.o : module_configure.F

module_configure.o \
shift_domain_em.o                                              \
wrf_bdyin.o wrf_bdyout.o  \
wrf_histin.o wrf_histout.o  \
wrf_inputin.o wrf_inputout.o  \
wrf_restartin.o wrf_restartout.o  \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o mediation_interp_domain.o \
mediation_force_domain.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH	Sun  SunOS SM   (OpenMP, no nesting)
#
OMP		=	-mp=openmp -explicitpar -stackvar
OMPCPP          =       -D_OPENMP
FC              =       f95
SFC		=	$(FC)
LD              =       f95
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS	=	`expr $(RWORDSIZE) \* 8`
PROMOTION	=	-xtypemap=real:$(RSIZEBITS),integer:32
CFLAGS          =	-DNCARIBM_NOC99
FCOPTIM		=	-O3 -xlibmopt
FCDEBUG		=	#-g
FCBASEOPTS	=	-fnonstd -free -xpp=cpp $(FCDEBUG) $(OMP) -w
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem \
			-M$(WRF_SRC_ROOT_DIR)/external/io_netcdf -M$(WRF_SRC_ROOT_DIR)/external/io_int -M$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
			-M$(WRF_SRC_ROOT_DIR)/frame -M$(WRF_SRC_ROOT_DIR)/share -M$(WRF_SRC_ROOT_DIR)/phys -M$(WRF_SRC_ROOT_DIR)/inc -M$(WRF_SRC_ROOT_DIR)/chem \
			-M$(WRF_SRC_ROOT_DIR)/dyn_em 
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG \
			-DLIMIT_ARGS
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	$(FCOPTIM) $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
#CPP            =       /opt/SUNWspro/bin/fpp
CPP             =       /usr/ccs/lib/cpp -C -P
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the Sun Fortran compiler complains about long source lines,      ####
#### usually due to cpp translating __FILE__ to a full pathname.              ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCBASEOPTS) " )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCBASEOPTS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCBASEOPTS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" FC="$(FC) $(PROMOTION) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" FC="$(SFC) $(PROMOTION) $(FCBASEOPTS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

solve_interface.o : solve_interface.F
	$(RM) $@
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.F > $*.f90
	$(FC) -c $(FCBASEOPTS) -I. $(PROMOTION) $(MODULE_DIRS) $*.f90

# compile these without high optimization to speed compile
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F

shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH   AIX                      (single-threaded, no nesting)
#
FC              =       xlf90_r
SFC		=	$(FC)
LD              =       xlf90_r
CC              =       cc_r
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-qrealsize=$(RWORDSIZE) -qintsize=4
CFLAGS          =       -DNOUNDERSCORE -DNCARIBM_NOC99
FCOPTIM         =       -O2 -qarch=auto
#FCOPTIM         =       -O3 -qhot
FCDEBUG         =       # -qnoopt -qfullpath
FCBASEOPTS      =       -qspill=20000 $(FCDEBUG) -qmaxmem=32767 -w #-qflttrap=zerodivide:invalid:enable -qsigtrap
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
FCSUFFIX        =       -qsuffix=f=f90
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       -lC
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG \
			-DLIMIT_ARGS  -DNATIVE_MASSV
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -lmass -lmassv \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 

LDFLAGS         =	 CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) $(FCSUFFIX) -qarch=auto -qzerosize" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC -qcpluscmt" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" FREE="" FIXED="-qfixed" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
wrf_bdyout.o : wrf_bdyout.F
wrf_bdyin.o : wrf_bdyin.F
wrf_restartout.o : wrf_restartout.F
wrf_restartin.o : wrf_restartin.F
wrf_inputin.o : wrf_inputin.F
wrf_inputout.o : wrf_inputout.F
wrf_histin.o : wrf_histin.F
wrf_histout.o : wrf_histout.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
convert_nmm.o : convert_nmm.F
module_configure.o : module_configure.F
solve_interface.o : solve_interface.F
solve_em.o : solve_em.F
solve_nmm.o : solve_nmm.F
module_integrate.o : module_integrate.F

wrf_bdyout.o wrf_bdyin.o \
wrf_restartout.o wrf_restartin.o wrf_inputin.o wrf_inputout.o wrf_histin.o wrf_histout.o \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o \
mediation_integrate.o \
mediation_interp_domain.o \
module_configure.o                                             \
solve_interface.o                                              \
shift_domain_em.o                                              \
solve_em.o							\
solve_nmm.o                                                     \
convert_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $*.f90

# to prevent having to call our service representative
mediation_feedback_domain.o \
mediation_force_domain.o start_domain.o module_integrate.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c -g $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) -qnoopt $*.f90

###########################################################
#ARCH   AIX                      (single-threaded, nesting, RSL_LITE w/o MPI)
#
FC              =       xlf90_r
SFC		=	$(FC)
LD              =       xlf90_r
CC              =       cc_r
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-qrealsize=$(RWORDSIZE) -qintsize=4
CFLAGS          =       -DNOUNDERSCORE -DNCARIBM_NOC99 -DSTUBMPI
FCOPTIM         =       -O2 -qarch=auto
#FCOPTIM         =       -O3 -qhot
FCDEBUG         =       # -qnoopt -qfullpath
FCBASEOPTS      =       -qspill=20000 $(FCDEBUG) -qmaxmem=32767 -w -DSTUBMPI #-qflttrap=zerodivide:invalid:enable -qsigtrap
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
FCSUFFIX        =       -qsuffix=f=f90
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       -lC
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG \
			-DLIMIT_ARGS -DNATIVE_MASSV
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -lmass -lmassv \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 

LDFLAGS         =	 CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) $(FCSUFFIX) -qarch=auto -qzerosize" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC -qcpluscmt" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" FREE="" FIXED="-qfixed" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC) $(CFLAGS)" FC="$(FC) $(FCFLAGS) $(PROMOTION) " MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization to speed compile
wrf_bdyout.o : wrf_bdyout.F
wrf_bdyin.o : wrf_bdyin.F
wrf_restartout.o : wrf_restartout.F
wrf_restartin.o : wrf_restartin.F
wrf_inputin.o : wrf_inputin.F
wrf_inputout.o : wrf_inputout.F
wrf_histin.o : wrf_histin.F
wrf_histout.o : wrf_histout.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
convert_nmm.o : convert_nmm.F
module_configure.o : module_configure.F
solve_interface.o : solve_interface.F
solve_em.o : solve_em.F
solve_nmm.o : solve_nmm.F
module_integrate.o : module_integrate.F

wrf_bdyout.o wrf_bdyin.o \
wrf_restartout.o wrf_restartin.o wrf_inputin.o wrf_inputout.o wrf_histin.o wrf_histout.o \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o \
mediation_integrate.o \
mediation_interp_domain.o \
module_configure.o                                             \
solve_interface.o                                              \
shift_domain_em.o                                              \
solve_em.o							\
solve_nmm.o                                                     \
convert_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $*.f90

# to prevent having to call our service representative
mediation_feedback_domain.o \
mediation_force_domain.o start_domain.o module_integrate.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c -g $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) -qnoopt $*.f90

###########################################################
#ARCH   AIX SM                   (OpenMP, no nesting)
#
OMP             =       -qsmp=noauto:noopt
OMPCPP          =       -D_OPENMP
FC              =       xlf90_r
SFC		=	$(FC)
LD              =       xlf90_r
CC              =       cc_r
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-qrealsize=$(RWORDSIZE) -qintsize=4
CFLAGS          =       -DNOUNDERSCORE -DNCARIBM_NOC99
FCOPTIM         =       -O2 -qarch=auto
#FCOPTIM         =       -O3 -qhot
FCDEBUG         =       # -qnoopt -qfullpath
FCBASEOPTS      =       -w -qspill=20000 $(FCDEBUG) -qmaxmem=32767 #-qflttrap=zerodivide:invalid:enable -qsigtrap
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
FCSUFFIX        =       -qsuffix=f=f90
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       -lC
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG \
			-DLIMIT_ARGS  -DNATIVE_MASSV
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -lmass -lmassv -lxlsmp \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	$(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC -qcpluscmt" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" FREE="" FIXED="-qfixed" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

module_sm.o 	: module_sm.F
module_tiles.o	: module_tiles.F
solve_em.o	: solve_em.F
solve_exp.o	: solve_exp.F
convert_nmm.o   : convert_nmm.F

module_sm.o module_tiles.o solve_em.o solve_exp.o convert_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(OMP) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) -qnoopt $*.f90

#	Compiled WITHOUT ANY SMP, needed Mar 2005
module_domain.o : module_domain.F
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) -qnoopt $*.f90

# compile these without high optimization to speed compile
wrf_bdyout.o : wrf_bdyout.F
wrf_bdyin.o : wrf_bdyin.F
wrf_restartout.o : wrf_restartout.F
wrf_restartin.o : wrf_restartin.F
wrf_inputin.o : wrf_inputin.F
wrf_inputout.o : wrf_inputout.F
wrf_histin.o : wrf_histin.F
wrf_histout.o : wrf_histout.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
convert_nmm.o : convert_nmm.F
module_configure.o : module_configure.F
solve_interface.o : solve_interface.F
module_integrate.o : module_integrate.F

wrf_bdyout.o wrf_bdyin.o \
wrf_restartout.o wrf_restartin.o wrf_inputin.o wrf_inputout.o wrf_histin.o wrf_histout.o \
module_io_mm5.o module_si_io.o module_io_wrf.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o \
mediation_integrate.o \
mediation_interp_domain.o \
module_configure.o                                             \
solve_interface.o                                              \
shift_domain_em.o                                              \
convert_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $*.f90

###########################################################
#ARCH   AIX SM                   (OpenMP, nesting, RSL_LITE w/o MPI)
#
OMP             =       -qsmp=noauto:noopt
OMPCPP          =       -D_OPENMP
FC              =       xlf90_r
SFC		=	$(FC)
LD              =       xlf90_r
CC              =       cc_r
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-qrealsize=$(RWORDSIZE) -qintsize=4
CFLAGS          =       -DNOUNDERSCORE -DNCARIBM_NOC99 -DSTUBMPI
FCOPTIM         =       -O2 -qarch=auto
#FCOPTIM         =       -O3 -qhot
FCDEBUG         =       # -qnoopt -qfullpath
FCBASEOPTS      =       -w -qspill=20000 $(FCDEBUG) -qmaxmem=32767 -DSTUBMPI #-qflttrap=zerodivide:invalid:enable -qsigtrap
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
FCSUFFIX        =       -qsuffix=f=f90
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       -lC
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG \
			-DLIMIT_ARGS -DNATIVE_MASSV
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -lmass -lmassv -lxlsmp \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	$(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

module_dm.F :  $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC -qcpluscmt" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" FREE="" FIXED="-qfixed" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC) $(CFLAGS)" FC="$(FC) $(FCFLAGS) $(PROMOTION) " MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

module_sm.o 	: module_sm.F
module_tiles.o	: module_tiles.F
solve_em.o	: solve_em.F
solve_exp.o	: solve_exp.F
convert_nmm.o   : convert_nmm.F

module_sm.o module_tiles.o solve_em.o solve_exp.o convert_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(OMP) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) -qnoopt $*.f90

#	Compiled WITHOUT ANY SMP, needed Mar 2005
module_domain.o : module_domain.F
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) -qnoopt $*.f90

# compile these without high optimization to speed compile
wrf_bdyout.o : wrf_bdyout.F
wrf_bdyin.o : wrf_bdyin.F
wrf_restartout.o : wrf_restartout.F
wrf_restartin.o : wrf_restartin.F
wrf_inputin.o : wrf_inputin.F
wrf_inputout.o : wrf_inputout.F
wrf_histin.o : wrf_histin.F
wrf_histout.o : wrf_histout.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
convert_nmm.o : convert_nmm.F
module_configure.o : module_configure.F
solve_interface.o : solve_interface.F
module_integrate.o : module_integrate.F

wrf_bdyout.o wrf_bdyin.o \
wrf_restartout.o wrf_restartin.o wrf_inputin.o wrf_inputout.o wrf_histin.o wrf_histout.o \
module_io_mm5.o module_si_io.o module_io_wrf.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o \
mediation_integrate.o \
mediation_interp_domain.o \
module_configure.o                                             \
solve_interface.o                                              \
shift_domain_em.o                                              \
convert_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $*.f90

###########################################################
#ARCH	AIX DM-Parallel          (RSL_LITE, IBM-MPI, Allows nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
SFC             =       xlf90_r
SCC             =       cc_r
FC              =       mpxlf90_r
LD              =       mpxlf90_r
CC              =       mpcc_r
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-qrealsize=$(RWORDSIZE) -qintsize=4
CFLAGS          =       -DNOUNDERSCORE  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -DDM_PARALLEL \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -DNCARIBM_NOC99
FCOPTIM         =       -O2 -qarch=auto
#FCOPTIM         =       -O3 -qhot
FCDEBUG         =       # -qnoopt -qfullpath
FCBASEOPTS      =       -w -qspill=20000 $(FCDEBUG) -qmaxmem=32767 #-qflttrap=zerodivide:invalid:enable -qsigtrap
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
FCSUFFIX        =       -qsuffix=f=f90
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       -lC
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_pnetcdf \
                        -I$(WRF_SRC_ROOT_DIR)/external/io_int $(ESMF_IO_INC) \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc $(ESMF_MOD_INC)
ARCHFLAGS       =       $(COREDEFS) -DRSL_LITE -DDM_PARALLEL -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) \
			$(DA_ARCHFLAGS) \
                        -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG CONFIGURE_PNETCDF_FLAG \
                        -DTRIEDNTRUE -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO \
			-DLIMIT_ARGS  -DNATIVE_MASSV -DNMM_NEST=$(WRF_NMM_NEST) $(ESMF_IO_DEFS)
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH CONFIGURE_PNETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite -lmass -lmassv \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int  \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o $(ESMF_IO_LIB)
LDFLAGS         =	 CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP		=	/lib/cpp
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS	=	-I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
MAX_PROC        =       1024
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
PNETCDFPATH	=	CONFIGURE_PNETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF CONFIGURE_WRFIO_PNF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F $(ESMF_TARGET) fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_pnf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_pnetcdf ; make NETCDFPATH=CONFIGURE_PNETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC -qcpluscmt" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" FREE="" FIXED="-qfixed" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CFLAGS="$(CFLAGS)" CC="$(CC)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization
wrf_bdyout.o : wrf_bdyout.F
wrf_bdyin.o : wrf_bdyin.F
wrf_restartout.o : wrf_restartout.F
wrf_restartin.o : wrf_restartin.F
wrf_inputin.o : wrf_inputin.F
wrf_inputout.o : wrf_inputout.F
wrf_histin.o : wrf_histin.F
wrf_histout.o : wrf_histout.F
module_configure.o : module_configure.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
convert_nmm.o : convert_nmm.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
solve_em.o : solve_em.F
solve_nmm.o : solve_nmm.F

wrf_bdyout.o wrf_bdyin.o \
wrf_restartout.o wrf_restartin.o wrf_inputin.o wrf_inputout.o wrf_histin.o wrf_histout.o \
module_configure.o module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o \
mediation_force_domain.o \
mediation_integrate.o \
mediation_interp_domain.o \
mediation_feedback_domain.o \
solve_interface.o                                              \
shift_domain_em.o                                              \
solve_em.o                                              \
solve_nmm.o                                                     \
convert_nmm.o    :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) -qnoopt $*.f90

###########################################################
#ARCH	AIX DM-Parallel          (RSL_LITE, IBM-MPI, Allows nesting )(PARALLEL HDF5)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
SFC             =       xlf90_r
SCC             =       cc_r
FC              =       mpxlf90_r
LD              =       mpxlf90_r
CC              =       mpcc_r
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-qrealsize=$(RWORDSIZE) -qintsize=4
CFLAGS          =       -DNOUNDERSCORE  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -DDM_PARALLEL  \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -DNCARIBM_NOC99
FCOPTIM         =       -O2 -qarch=auto 
#FCOPTIM         =       -O3 -qhot
FCDEBUG         =       # -qnoopt -qfullpath
FCBASEOPTS      =       -w -qspill=20000 $(FCDEBUG) -qmaxmem=-1 #-qflttrap=zerodivide:invalid:enable -qsigtrap
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
FCSUFFIX        =       -qsuffix=f=f90
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       -lC
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf  -I$(WRF_SRC_ROOT_DIR)/external/io_phdf5 -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
ARCHFLAGS       =       $(COREDEFS) -DRSL_LITE -DDM_PARALLEL -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) \
			$(DA_ARCHFLAGS) \
                        -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG CONFIGURE_PHDF5_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO \
			-DLIMIT_ARGS  -DNATIVE_MASSV
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH CONFIGURE_PHDF5_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite -lmass -lmassv \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int  \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	 CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP		=	/lib/cpp
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS	=	-I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
MAX_PROC        =       1024
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 CONFIGURE_WRFIO_PHDF5 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_phdf5 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_phdf5 ; make PHDF5PATH=CONFIGURE_PHDF5_PATH FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qfree=F90 -qzerosize" ; /bin/cp wrf_io_flags.h wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC -qcpluscmt" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" FREE="" FIXED="-qfixed" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization
wrf_bdyout.o : wrf_bdyout.F
wrf_bdyin.o : wrf_bdyin.F
wrf_restartout.o : wrf_restartout.F
wrf_restartin.o : wrf_restartin.F
wrf_inputin.o : wrf_inputin.F
wrf_inputout.o : wrf_inputout.F
wrf_histin.o : wrf_histin.F
wrf_histout.o : wrf_histout.F
module_configure.o : module_configure.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
convert_nmm.o : convert_nmm.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
solve_em.o : solve_em.F
solve_nmm.o : solve_nmm.F

wrf_bdyout.o wrf_bdyin.o \
wrf_restartout.o wrf_restartin.o wrf_inputin.o wrf_inputout.o wrf_histin.o wrf_histout.o \
module_configure.o module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o \
mediation_force_domain.o \
mediation_integrate.o \
mediation_interp_domain.o \
mediation_feedback_domain.o \
solve_interface.o                                              \
shift_domain_em.o                                              \
solve_em.o                                              \
solve_nmm.o                                                     \
convert_nmm.o    :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) -qnoopt $*.f90

###########################################################
#ARCH	AIX DM-Parallel          (RSL_LITE, IBM-MPI, MCEL)   May 2003, EXPERIMENTAL
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
SFC             =       xlf90_r
SCC             =       cc_r
FC              =       mpxlf90_r
LD              =       mpCC_r
CC              =       mpcc_r
RWORDSIZE       =       CONFIGURE_RWORDSIZE
MCELHOME        =       /home/bluesky/bettenc/disttest
PROMOTION	=	-qrealsize=$(RWORDSIZE) -qintsize=4
CFLAGS          =       -DNOUNDERSCORE  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -DDM_PARALLEL  \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -DNCARIBM_NOC99
FCOPTIM         =       -O2 -qarch=auto
FCDEBUG         =       # -qnoopt -qfullpath
FCBASEOPTS      =       -w -qspill=20000 $(FCDEBUG) -qmaxmem=32767 #-qflttrap=zerodivide:invalid:enable -qsigtrap
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       -lC
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
ARCHFLAGS       =       -DRSL_LITE -DDM_PARALLEL -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) \
			$(DA_ARCHFLAGS) \
                        -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG -DTRIEDNTRUE   -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DMCELIO -DLIMIT_ARGS \
                         -DNATIVE_MASSV
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                        -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite -lmass -lmassv -lxlsmp \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_mcel -lwrfio_mcel  \
-L$(MCELHOME)/MCELSystem/MCEL -lMCEL  \
-L$(MCELHOME)/lib -lomniORB4  \
-lomnithread -lomniDynamic4  -lnetcdf_c++ -lnetcdf  -lxlf90 -lxlopt  \
                        -lxlf -lxlomp_ser -lm -lc -lpthread \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int  \
                        $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	 CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP		=	/lib/cpp
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS	=	-I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
MAX_PROC        =       1024
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int wrfio_mcel gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( cat $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c > $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( cat module_dm_warning $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F > module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC -qcpluscmt" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" FREE="" FIXED="-qfixed" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

wrfio_mcel : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_mcel ; \
          make CC="$(CC)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -I$(WRF_SRC_ROOT_DIR)/inc -I../io_netcdf -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share \
               -I$(MCELHOME)/MCELSystem/MCEL -qfree=f90" all )


$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" FC="$(SFC) $(PROMOTION) $(FCFLAGS)" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization
module_configure.o : module_configure.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
convert_nmm.o : convert_nmm.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
solve_em.o : solve_em.F

module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o \
module_configure.o \
mediation_force_domain.o \
mediation_integrate.o \
mediation_interp_domain.o \
mediation_feedback_domain.o \
solve_interface.o                                              \
shift_domain_em.o                                              \
solve_em.o                                              \
convert_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) -qnoopt $*.f

###########################################################
#ARCH       Linux ppc64 BG (Blue Gene, RSL_LITE, IBM-MPI) 
#
# from sheeba
BGL_SYS         =       /bgl/BlueLight/ppcfloor/bglsys
MPI_INC         =       -I$(BGL_SYS)/include
MPI_LIB         =       -L$(BGL_SYS)/lib -lmpich.rts -lmsglayer.rts -lrts.rts -ldevices.rts
TRACE_LIB       =       -L/contrib/bgl/mpi_trace  -lmpitrace_c

SFC              =      blrts_xlf90
SCC             =       blrts_xlc
DMPARALLEL      =       1
FC              =       $(SFC)
LD              =       $(FC)
CC              =       $(SCC)

RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-qrealsize=$(RWORDSIZE) -qintsize=4
CFLAGS          =       -DNOUNDERSCORE -DNCARIBM_NOC99 $(MPI_INC) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -DLANDREAD_STUB -DDM_PARALLEL
FCOPTIM         =       -O2 -qarch=440
FCDEBUG         =       # -qnoopt -qfullpath -qarch=440

FCBASEOPTS      =       -qspill=20000 $(FCDEBUG) -qmaxmem=64000  $(MPI_INC) -w #-qflttrap=zerodivide:invalid:enable -qsigtrap
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)

INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_pnetcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc 

ARCHFLAGS       =       $(COREDEFS) -DDM_PARALLEL -DRSL_LITE -DINTIO -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG CONFIGURE_PNETCDF_FLAG \
			-DLIMIT_ARGS  -DNATIVE_MASSV -DLANDREAD_STUB

PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH CONFIGURE_PNETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite -L/bgl/local/lib -lmass -lmassv \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time \
			-L/home/michalak/fftpack5 -lfftpack \
			$(TRACE_LIB) $(MPI_LIB)

LDFLAGS         =	-Wl,--allow-multiple-definition -qstatic
ENVCOMPDEFS	=	
WRF_CHEM	=	0 
CPP             =       /opt/ibmcmp/xlf/9.1/exe/cpp
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DF90_STANDALONE -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
#### this is a hand installed version of m4 on frost.ucar.edu
#### a copy is available at http://www.mmm.ucar.edu/wrf/WG2/BG/m4
M4              =       /home/janicec/m4 -B 12000
RANLIB          =       ranlib
NETCDFPATH      =       CONFIGURE_NETCDF_PATH
PNETCDFPATH     =       CONFIGURE_PNETCDF_PATH
CC_TOOLS        =       cc
WRF_CONVERT = 0

externals : wrf_ioapi_includes $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a CONFIGURE_WRFIO_NF CONFIGURE_WRFIO_PNF wrfio_int module_dm.F esmf_time gen_comms.c fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH="$(NETCDFPATH)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_pnf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_pnetcdf ; make NETCDFPATH=CONFIGURE_PNETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(MPI_INC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" all )

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CFLAGS="$(CFLAGS)" CC="$(CC)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

solve_interface.o : solve_interface.F
	$(RM) $@
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.F > $*.f90
	$(FC) -c -qfree=f90 -qspillsize=32767 -I. $(PROMOTION) $(MODULE_DIRS) $*.f90

# compile these without high optimization to speed compile
wrf_bdyout.o : wrf_bdyout.F
wrf_bdyin.o : wrf_bdyin.F
wrf_restartout.o : wrf_restartout.F
wrf_restartin.o : wrf_restartin.F
wrf_inputin.o : wrf_inputin.F
wrf_inputout.o : wrf_inputout.F
wrf_histin.o : wrf_histin.F
wrf_histout.o : wrf_histout.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
convert_nmm.o : convert_nmm.F
module_configure.o : module_configure.F
solve_em.o : solve_em.F
start_em.o : start_em.F

wrf_bdyout.o wrf_bdyin.o \
wrf_restartout.o wrf_restartin.o wrf_inputin.o wrf_inputout.o wrf_histin.o wrf_histout.o \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o \
mediation_integrate.o \
mediation_interp_domain.o \
module_configure.o                                             \
solve_em.o                                              \
start_em.o                                              \
shift_domain_em.o                                              \
convert_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

# to prevent having to call our service representative
mediation_feedback_domain.o \
mediation_force_domain.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c -g $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) -qnoopt $*.f90

###########################################################
#ARCH       Compaq OSF1 alpha          (single-threaded, no nesting)
#
OMP             =       
OMPCPP          =       
FC              =       f90
SFC		=	$(FC)
LD              =       f90
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS	=	`expr $(RWORDSIZE) \* 8`
ARCHFLAGS       =       $(COREDEFS) CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO \
			$(DA_ARCHFLAGS) \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			-DLIMIT_ARGS -DFLOATSAFE
PROMOTION	=	-real_size $(RSIZEBITS) -integer_size `expr 4 \* 8`
CFLAGS          =       $(ARCHFLAGS)
FCOPTIM         =       -fast -O4
FCDEBUG         =       # -g
FCDEBUG_ESMF    =       # -O0
FCBASEOPTS      =       -w -convert big_endian -automatic -cpp -free -I. -arch host $(FCDEBUG)
FCBASEOPTS_ESMF =       -w -convert big_endian -automatic -cpp -free -I. -arch host $(FCDEBUG_ESMF)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
FCFLAGS_ESMF    =       $(FCOPTIM) $(FCBASEOPTS_ESMF) $(OMP)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time  \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share
LDFLAGS         =       $(FCOPTIM) $(OMP) -automatic -convert big_endian $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /usr/bin/cpp -C -P
POUND_DEF	=	-DDEC_ALPHA -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive)

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCFLAGS_ESMF)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

nest_init_utils.o : nest_init_utils.F
module_optional_si_input.o : module_optional_si_input.F

nest_init_utils.o module_optional_si_input.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) -w -convert big_endian -automatic -cpp -free -I. -arch host $(MODULE_DIRS) $*.f90

# compile these without high optimization to speed compile
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F

module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_interp_domain.o  \
mediation_force_domain.o  \
mediation_feedback_domain.o  \
module_initialize_real.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) -O0 $*.f90

mediation_integrate.o : mediation_integrate.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
mediation_wrfmain.o : mediation_wrfmain.F
solve_em.o : solve_em.F

mediation_integrate.o module_dm.o module_comm_dm.o mediation_wrfmain.o solve_em.o : 
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS_ESMF) $(MODULE_DIRS) -O0 $*.f90

###########################################################
#ARCH       Compaq OSF1 alpha SM       (OpenMP, no nesting)
#
OMP             =       -omp
OMPCPP          =       -D_OPENMP
FC              =       f90
SFC		=	$(FC)
LD              =       f90
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS	=	`expr $(RWORDSIZE) \* 8`
ARCHFLAGS       =       $(COREDEFS) CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO \
			$(DA_ARCHFLAGS) \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			-DLIMIT_ARGS -DFLOATSAFE
PROMOTION	=	-real_size $(RSIZEBITS) -integer_size `expr 4 \* 8`
CFLAGS          =       $(ARCHFLAGS)
FCOPTIM         =       -fast -O4
FCDEBUG         =       # -g
FCDEBUG_ESMF    =       # -O0
FCREAL8OMP	=	-align records -align dcommons -granularity quadword
FCBASEOPTS      =       -w -convert big_endian -automatic -cpp -free -I. -arch host $(FCDEBUG) $(FCREAL8OMP)
FCBASEOPTS_ESMF =       -w -convert big_endian -automatic -cpp -free -I. -arch host $(FCDEBUG_ESMF) $(FCREAL8OMP)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
FCFLAGS_ESMF    =       $(FCOPTIM) $(FCBASEOPTS_ESMF) $(OMP)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share
LDFLAGS         =       $(FCOPTIM) $(OMP) -automatic -convert big_endian $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /usr/bin/cpp -C -P
POUND_DEF	=	-DDEC_ALPHA -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCREAL8OMP) -convert big_endian -automatic -cpp -free -w" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCREAL8OMP) -convert big_endian -automatic -cpp -free -w " archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCREAL8OMP) -convert big_endian -automatic -cpp -free -w " archive)

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCFLAGS_ESMF)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

nest_init_utils.o : nest_init_utils.F
module_optional_si_input.o : module_optional_si_input.F

nest_init_utils.o module_optional_si_input.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) -w -convert big_endian -automatic -cpp -free -I. -arch host $(MODULE_DIRS) $*.f90

# compile these without high optimization to speed compile
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F

module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_interp_domain.o  \
mediation_force_domain.o  \
mediation_feedback_domain.o  \
module_initialize_real.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) -O0 $*.f90

mediation_integrate.o : mediation_integrate.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
mediation_wrfmain.o : mediation_wrfmain.F
solve_em.o : solve_em.F

mediation_integrate.o module_dm.o module_comm_dm.o mediation_wrfmain.o solve_em.o : 
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS_ESMF) $(MODULE_DIRS) -O0 $*.f90

###########################################################
#ARCH     Compaq OSF1 alpha DM-Parallel       (RSL_LITE, MPICH, allows ARW and NMM nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
OMP             =
OMPCPP          =
FC              =       mpif90
SFC		=	f90
LD              =       mpif90
CC              =       mpicc
SCC		=	cc
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS	=	`expr $(RWORDSIZE) \* 8`
ARCHFLAGS       =       $(COREDEFS) -DNETCDF -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO \
			$(DA_ARCHFLAGS) \
                        -DDM_PARALLEL -DRSL_LITE \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			-DLIMIT_ARGS -DFLOATSAFE \
			-DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC)
PROMOTION	=	-real_size $(RSIZEBITS) -integer_size `expr 4 \* 8`
CFLAGS          =       $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM         =       -fast -O4
FCDEBUG         =       #-g
FCDEBUG_ESMF    =       # -O0
FCBASEOPTS      =       -w -convert big_endian -automatic -cpp -free -I. -arch host $(FCDEBUG)
FCBASEOPTS_ESMF =       -w -convert big_endian -automatic -cpp -free -I. -arch host $(FCDEBUG_ESMF)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
FCFLAGS_ESMF    =       $(FCOPTIM) $(FCBASEOPTS_ESMF) $(OMP)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite  \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share
LDFLAGS         =       $(FCOPTIM) -automatic -convert big_endian $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /usr/bin/cpp -C -P
POUND_DEF	=	-DDEC_ALPHA -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
MAX_PROC        =       1024
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCFLAGS_ESMF)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; \
          make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

nest_init_utils.o : nest_init_utils.F
module_optional_si_input.o : module_optional_si_input.F
module_IGWAVE_ADJUST.o : module_IGWAVE_ADJUST.F

nest_init_utils.o module_optional_si_input.o module_IGWAVE_ADJUST.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) -w -convert big_endian -automatic -cpp -free -I. -arch host $(MODULE_DIRS) $*.f90

# compile these without high optimization to speed compile
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
start_domain.o : start_domain.F
start_domain_nmm.o : start_domain_nmm.F
module_configure.o : module_configure.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F

module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_interp_domain.o  \
mediation_force_domain.o  \
mediation_feedback_domain.o  \
module_initialize_real.o start_domain.o start_domain_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) -O0 $*.f90

mediation_integrate.o : mediation_integrate.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
mediation_wrfmain.o : mediation_wrfmain.F
solve_em.o : solve_em.F

mediation_integrate.o module_dm.o module_comm_dm.o mediation_wrfmain.o solve_em.o : 
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS_ESMF) $(MODULE_DIRS) -O0 $*.f90

###########################################################
#ARCH       Compaq OSF1 alpha DM/SM    (BUILD FOR AUTODOC ONLY -- DO NOT USE TO COMPILE CODE)
#
DMPARALLEL      =       1
OMP             =
OMPCPP          =
FC              =       echo # mpif90
SFC             =       echo # mpif90
LD              =       echo # mpif90
CC              =       echo # mpicc
SCC		=	echo # cc
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS	=	`expr $(RWORDSIZE) \* 8`
ARCHFLAGS       =       $(COREDEFS) -DAUTODOC_BUILD CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DWRF_RSL_IO \
			$(DA_ARCHFLAGS) \
                        -DDM_PARALLEL="'<b>DM_PARALLEL</b>'" -DRSL_LITE="'<b>RSL_LITE</b>'" \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			-DLIMIT_ARGS -DFLOATSAFE \
			-DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -DMOVE_NESTS
PROMOTION	=	-real_size $(RSIZEBITS) -integer_size `expr 4 \* 8`
CFLAGS          =       $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM         =       -fast -O4
FCDEBUG         =       # -g
FCDEBUG_ESMF    =       # -O0
FCBASEOPTS      =       -w -convert big_endian -automatic -cpp -free -I. -arch host $(FCDEBUG)
FCBASEOPTS_ESMF =       -w -convert big_endian -automatic -cpp -free -I. -arch host $(FCDEBUG_ESMF)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
FCFLAGS_ESMF    =       $(FCOPTIM) $(FCBASEOPTS_ESMF) $(OMP)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCOPTIM) -automatic -convert big_endian $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /usr/bin/cpp -C -P
POUND_DEF	=	-DDEC_ALPHA -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
MAX_PROC        =       1024
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int $(WRF_SRC_ROOT_DIR)/external/RSL/librsl_lite.a gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCFLAGS_ESMF)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL/RSL/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; \
          make CC="$(CC)" FC="$(FC) $(PROMOTION)" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) all )

# compile these without high optimization to speed compile
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F

module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
module_initialize_real.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) -O0 $*.f90

mediation_integrate.o : mediation_integrate.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
mediation_wrfmain.o : mediation_wrfmain.F
solve_em.o : solve_em.F

mediation_integrate.o module_dm.o module_comm_dm.o mediation_wrfmain.o solve_em.o : 
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS_ESMF) $(MODULE_DIRS) -O0 $*.f90

###########################################################
#ARCH     Compaq OSF1 alpha DM-Parallel       (RSL_LITE, MPICH, allows ARW and NMM nesting, UNOPT shift_domain)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
OMP             =
OMPCPP          =
FC              =       mpif90
SFC		=	f90
LD              =       mpif90
CC              =       mpicc
SCC		=	cc
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS	=	`expr $(RWORDSIZE) \* 8`
ARCHFLAGS       =       $(COREDEFS) -DNETCDF -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO \
			$(DA_ARCHFLAGS) \
                        -DDM_PARALLEL -DRSL_LITE \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			-DLIMIT_ARGS -DFLOATSAFE \
			-DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC)
PROMOTION	=	-real_size $(RSIZEBITS) -integer_size `expr 4 \* 8`
CFLAGS          =       $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM         =       -fast -O4
FCDEBUG         =       #-g
FCDEBUG_ESMF    =       # -O0
FCBASEOPTS      =       -w -convert big_endian -automatic -cpp -free -I. -arch host $(FCDEBUG)
FCBASEOPTS_ESMF =       -w -convert big_endian -automatic -cpp -free -I. -arch host $(FCDEBUG_ESMF)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
FCFLAGS_ESMF    =       $(FCOPTIM) $(FCBASEOPTS_ESMF) $(OMP)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite  \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share
LDFLAGS         =       $(FCOPTIM) -automatic -convert big_endian $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /usr/bin/cpp -C -P
POUND_DEF	=	-DDEC_ALPHA -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
MAX_PROC        =       1024
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make IO_GRIB_SHARE_DIR="$(WRF_SRC_ROOT_DIR)/external/io_grib_share/" CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -convert big_endian -automatic -cpp -free -w " archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCFLAGS_ESMF)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; \
          make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

nest_init_utils.o : nest_init_utils.F
module_optional_si_input.o : module_optional_si_input.F
module_IGWAVE_ADJUST.o : module_IGWAVE_ADJUST.F

nest_init_utils.o module_optional_si_input.o module_IGWAVE_ADJUST.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) -w -convert big_endian -automatic -cpp -free -I. -arch host $(MODULE_DIRS) $*.f90

# compile these without high optimization to speed compile
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
start_domain.o : start_domain.F
start_domain_nmm.o : start_domain_nmm.F
module_configure.o : module_configure.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
shift_domain_em.o : shift_domain_em.F

module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_interp_domain.o  \
mediation_force_domain.o  \
mediation_feedback_domain.o  \
shift_domain_em.o \
module_initialize_real.o start_domain.o start_domain_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) -O0 $*.f90

mediation_integrate.o : mediation_integrate.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
mediation_wrfmain.o : mediation_wrfmain.F
solve_em.o : solve_em.F

mediation_integrate.o module_dm.o module_comm_dm.o mediation_wrfmain.o solve_em.o : 
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS_ESMF) $(MODULE_DIRS) -O0 $*.f90

###########################################################
#ARCH       Alpha Linux alpha DM  (single-threaded, no nesting)
#
FC              =       fort
SFC		=	$(FC)
LD              =       fort
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       -DF2CSTYLE 
FCOPTIM         =       -fast -O4
FCDEBUG         =       # -g
FCBASENOINL     =       -convert big_endian -O1 -automatic -cpp -free -I. -arch host $(FCDEBUG)
FCBASEOPTS      =       -w -convert big_endian -automatic -cpp -free -I. \
                        -arch host $(FCDEBUG)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG 
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o  -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCOPTIM) -automatic -convert big_endian CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P
POUND_DEF	=	-DDEC_ALPHA -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -traditional  $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; \
	  cat  module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCBASENOINL) -w" TRADFLAG="-traditional" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASENOINL) -w" \
          TRADFLAG="-traditional" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASENOINL) -w" \
          TRADFLAG="-traditional" archive)

wrfio_grib1 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASENOINL) -w" \
          TRADFLAG="-traditional" archive )

wrfio_grib2 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASENOINL) -w" \
          TRADFLAG="-traditional" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F

module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASENOINL) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH       Alpha Linux alpha SM  (DOES NOT WORK ON JET! No nesting)
#
FC              =       fort
SFC		=	$(FC)
LD              =       fort
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       -DF2CSTYLE 
FCOPTIM         =       -fast -O4
FCDEBUG         =       # -g
FCBASENOINL     =       -convert big_endian -O1 -automatic -cpp -free -I. -arch host $(FCDEBUG)
FCBASEOPTS      =       -w -convert big_endian -automatic -cpp -free -I. \
                        -arch host $(FCDEBUG)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG 
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o  -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCOPTIM) -automatic -convert big_endian CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P
POUND_DEF	=	-DDEC_ALPHA -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -traditional -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          /bin/cp module_dm_warning module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCBASENOINL) -w" TRADFLAG="-traditional" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASENOINL) -w" \
          TRADFLAG="-traditional" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASENOINL) -w" \
          TRADFLAG="-traditional" archive)

wrfio_grib1 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASENOINL) -w" \
          TRADFLAG="-traditional" archive )
wrfio_grib2 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASENOINL) -w" \
          TRADFLAG="-traditional" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F

module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASENOINL) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH       VPP UNIX_System_V F300 5000
#
FC              =       frt
SFC		=	$(FC)
LD              =       frt
CC              =       vcc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =
FCFLAGS         =       -Free -X9 -Am
FCFLAGS         =       -Free -X9 -Sw -Wv,-Of,-te,-ilfunc,-noalias,-m3,-P255 -Oe,-P -Kfast -Am
FCDEBUG         =       # -g
FCBASEOPTS      =       $(FCFLAGS)
ARCHFLAGS       = $(COREDEFS) CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
			-DLIMIT_ARGS
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             = 	$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share
LDFLAGS         =      -Wl,-P -J CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
LDFLAGS         =      -J CONFIGURE_LDFLAGS
CPP             =       /lib/cpp -C -P
POUND_DEF	=	-DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2  module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) -Free -X9" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) -Free -X9" archive)

wrfio_grib1 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) -Free -X9" archive )

wrfio_grib2 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -Free -X9" archive )

###########################################################
#ARCH	Cray
#
FC		=	f90
SFC		=	$(FC)
CC              =       cc
SCC		=	$(CC)
NATIVE_RWORDSIZE =      8
RWORDSIZE       =       CONFIGURE_RWORDSIZE
# does this PROMOTION flag work on Cray?  
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =
FCFLAGS		=	-f free -N 255 -I.
FCDEBUG         =       # -g
FCBASEOPTS	=	$(FCFLAGS)
ARCHFLAGS       =       $(COREDEFS) -DCRAY CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DIWORDSIZE=8 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=8 \
			$(DA_ARCHFLAGS) \
			-DLIMIT_ARGS
LDFLAGS		= CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP		=	/opt/ctl/bin/cpp
POUND_DEF	=	-DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS	=	-I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
#LIB             =       CONFIGURE_NETCDF_LIB_PATH 
LIB             = 	$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time  \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2  esmf_time fftpack
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" archive)

wrfio_grib1 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" archive )

wrfio_grib2 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCFLAGS)" archive )

solve_interface.o : solve_interface.F
	$(RM) $@
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.F > $*.f90
	$(FC) -c -O 0 $(PROMOTION) $(FCFLAGS) $*.f90

###########################################################
#ARCH    PC Linux i486 i586 i686, PGI compiler  (Single-threaded, no nesting)
#
FC              =       pgf90
LD              =       pgf90
CC              =       gcc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
SFC             =       $(FC)
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =
FCOPTIM		=	-O2 # -fast
FCDEBUG		=	#-g
FCBASEOPTS      =       -w -byteswapio -Ktrap=fp -Mfree $(FCDEBUG)
#FCBASEOPTS      =       -w -byteswapio -Mfree -Mipa=fast,inline,safe  $(FCDEBUG) # -Mlfs
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG \
			-DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCFLAGS) -byteswapio CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF	=	$(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
          TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 10 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 30 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 300 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi

###########################################################
#ARCH   PC Linux i486 i586 i686, PGI compiler  SM-Parallel (OpenMP, no nesting)
#
OMP             =       -mp
OMPCPP          =       -D_OPENMP
FC              =       pgf90
LD              =       pgf90
CC              =       gcc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
SFC             =       $(FC)
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =
FCOPTIM		=	-O2 # -fast
FCDEBUG		=	#-g
#FCBASEOPTS      =       -w -byteswapio -Ktrap=fp -Mfree $(FCDEBUG)
FCBASEOPTS      =       -w -byteswapio -Mfree $(FCDEBUG) # -Mlfs
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG \
			-DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	$(FCFLAGS) $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF	=	$(OMPCPP) -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
          TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_integrate.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 10 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 30 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 300 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi

###########################################################
#ARCH     PC Linux i486 i586 i686, PGI compiler  DM-Parallel (RSL_LITE, MPICH, Allows nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
MAX_PROC        =       1024
FC              =       mpif90 -f90=pgf90
LD              =       mpif90 -f90=pgf90
CC              =       mpicc -cc=gcc
SCC		=	gcc
SFC             =       pgf90
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       -DDM_PARALLEL \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
#FCOPTIM		=	-fastsse 
FCOPTIM		=	-O2 # -fast
FCDEBUG		=	#-g
#FCBASEOPTS      =       -w -byteswapio -Ktrap=fp -Mfree $(FCDEBUG)
FCBASEOPTS      =       -w -byteswapio -Mfree $(FCDEBUG) # -Mlfs
#Options for Debian Sarge systems
#FCBASEOPTS      =       -w -byteswapio -Mfree -Mipa=fast,inline,safe  $(FCDEBUG) # -Mlfs
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DDM_PARALLEL \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG \
			$(DA_ARCHFLAGS) \
			-DLIMIT_ARGS -DNMM_NEST=$(WRF_NMM_NEST)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       -byteswapio $(FCFLAGS) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF	=	-DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive)

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" FC="$(FC) $(FCFLAGS) $(PROMOTION) -byteswapio" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_integrate.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 10 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 30 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 300 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi

###########################################################
#ARCH    PC Linux x86_64 (IA64 and Opteron), gfortran compiler 4.3.0 or higher  (single threaded)
#
#
OMP               =
OMPCPP            =
FC                = gfortran
LD                = $(FC)
CC                = gcc
SCC               = gcc
CC_TOOLS          = $(SCC)
SFC               = gfortran
RWORDSIZE         = $(NATIVE_RWORDSIZE)
FCOPTIM           = -O3
CFLAGS            = -w -O3 -c -DLANDREAD_STUB
FCDEBUG           = # -O0 -g
FCBASEOPTS        = -fconvert=big-endian -frecord-marker=4 -I. $(FCDEBUG) -ffree-form
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
                    CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG \
                    -DLIMIT_ARGS -DLANDREAD_STUB
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       =       ESMFIOLIB
ESMF_IO_LIB_EXT   =       ESMFIOEXTLIB
INCLUDE_MODULES   = -I../main -I../external/io_netcdf -I../external/io_int -I../external/esmf_time_f90 \
                    -I../external -I../frame -I../share -I../phys -I../inc
PERL              = perl
REGISTRY          = Registry
LIB               = CONFIGURE_NETCDF_LIB_PATH $(OMP) \
                    -L../external/fftpack/fftpack5 -lfftpack \
                    -L../external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L../external/io_grib_share -lio_grib_share \
                    -L../external/io_int -lwrfio_int \
                    ../frame/module_internal_header_util.o ../frame/pack_utils.o -L../external/esmf_time_f90 -lesmf_time 
LDFLAGS           =  $(OMP)
ENVCOMPDEFS       =  CONFIGURE_COMPILEFLAGS
CPP               =  /lib/cpp -C -P -traditional
POUND_DEF         =  -DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          =  -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I../external/RSL_LITE -C -P `cat ../inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF)
AR                =  ar ru
M4                =  m4 -G
RANLIB            =  ranlib
NETCDFPATH        =  CONFIGURE_NETCDF_PATH

externals :  wrfio_nf wrfio_int module_dm.F wrfio_grib_share wrfio_grib1  esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf :
	( cd ../external/io_netcdf ; \
          make NETCDFPATH=/home/michalak/netcdf CPP="$(CPP)" FC="$(FC) -I../.. $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../../inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd ../external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd ../external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd ../external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd ../external/io_grib2 ; \
          make CC="$(CC) " CPP="$(CPP) " RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd ../external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I../../inc -I. $(POUND_DEF)" )

fftpack :
	( cd ../external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I../inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# Force even lower optimization level for these files to decrease
# compilation time and lower memory demands
module_dm.o : module_dm.F
solve_em.o : solve_em.F
start_em.o : start_em.F

solve_em.o \
start_em.o \
module_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I../inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) -O0 $(MODULE_DIRS) $*.f90

###########################################################
#ARCH    PC Linux x86_64 (IA64 and Opteron), gfortran compiler 4.3.0 or higher  (MPICH, RSL_LITE)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL        = 1
OMP               =
OMPCPP            =
MAX_PROC          = 1024
MPI_HOME          = $(MPICH)
FC                = $(MPI_HOME)/bin/mpif90 -f90=gfortran
LD                = $(FC)
CC                = $(MPI_HOME)/bin/mpicc -cc=gcc
SCC               = gcc
CC_TOOLS          = $(SCC)
SFC               = gfortran
RWORDSIZE         = $(NATIVE_RWORDSIZE)
FCOPTIM           = -O3
CFLAGS            = -w -O3 -c -DDM_PARALLEL  -I../external/RSL_LITE -DLANDREAD_STUB
FCDEBUG           = # -O0 -g
FCBASEOPTS        = -fconvert=big-endian -frecord-marker=4 -I. $(FCDEBUG) -ffree-form
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
                    CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG \
                    -DLIMIT_ARGS -DLANDREAD_STUB
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       =       ESMFIOLIB
ESMF_IO_LIB_EXT   =       ESMFIOEXTLIB
INCLUDE_MODULES   = -I../main -I../external/io_netcdf -I../external/io_int -I../external/esmf_time_f90 \
                    -I../external -I../frame -I../share -I../phys -I../inc
PERL              = perl
REGISTRY          = Registry
LIB               = CONFIGURE_NETCDF_LIB_PATH -L../external/RSL_LITE -lrsl_lite $(OMP) \
                    -L../external/fftpack/fftpack5 -lfftpack \
                    -L../external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L../external/io_grib_share -lio_grib_share \
                    -L../external/io_int -lwrfio_int \
                    ../frame/module_internal_header_util.o ../frame/pack_utils.o -L../external/esmf_time_f90 -lesmf_time 
LDFLAGS           =  $(OMP)
ENVCOMPDEFS       =  CONFIGURE_COMPILEFLAGS
CPP               =  /lib/cpp -C -P -traditional
POUND_DEF         =  -DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          =  -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I../external/RSL_LITE -C -P `cat ../inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF)
AR                =  ar ru
M4                =  m4 -G
RANLIB            =  ranlib
NETCDFPATH        =  CONFIGURE_NETCDF_PATH

externals :  wrfio_nf ../external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1  esmf_time fftpack

gen_comms.c : ../external/RSL_LITE/gen_comms.c
	( /bin/cp ../tools/gen_comms_warning ../tools/gen_comms.c ; \
          cat ../external/RSL_LITE/gen_comms.c >> ../tools/gen_comms.c )

module_dm.F : ../external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat ../external/RSL_LITE/module_dm.F >> module_dm.F )

../external/RSL_LITE/librsl_lite.a :
	( cd ../external/RSL_LITE ; make CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I../../.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd ../external/io_netcdf ; \
          make NETCDFPATH=/home/michalak/netcdf CPP="$(CPP)" FC="$(FC) -I../.. $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../../inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd ../external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd ../external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd ../external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd ../external/io_grib2 ; \
          make CC="$(CC) " CPP="$(CPP) " RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd ../external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I../../inc -I. $(POUND_DEF)" )

fftpack :
	( cd ../external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I../inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# Force even lower optimization level for these files to decrease
# compilation time and lower memory demands
module_dm.o : module_dm.F
solve_em.o : solve_em.F
start_em.o : start_em.F

solve_em.o \
start_em.o \
module_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I../inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) -O0 $(MODULE_DIRS) $*.f90

############################################################

# These sub-directory builds are identical across all architectures
wrfio_esmf :
	( cd ../external/io_esmf ; \
	make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) $(ESMF_MOD_INC)" RANLIB="$(RANLIB)" CPP="$(CPP) $(POUND_DEF) " )


#
#	Macros, these should be generic for all machines

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

#	There is probably no reason to modify these rules

wrf_ioapi_includes :
	( cd ../external/ioapi_share ; \
	$(MAKE) NATIVE_RWORDSIZE="$(NATIVE_RWORDSIZE)" RWORDSIZE="$(RWORDSIZE)" )

.F.i:
	$(RM) $@
	$(CPP) -I../inc $(CPPFLAGS) $*.F > $@
	mv $*.i $(DEVTOP)/pick/$*.f90
	cp $*.F $(DEVTOP)/pick

.F.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I../inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -o $@ -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $*.f90
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 10 ; $(FC) -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $*.f90 ; \
#PGI	fi
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 10 ; $(FC) -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $*.f90 ; \
#PGI	fi

.F.f90:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I../inc $(CPPFLAGS) $*.b  > $@
	$(RM) $*.b

.f90.o:
	$(RM) $@
	$(FC) -o $@ -c $(FCFLAGS) $(PROMOTION) $(FCSUFFIX) $*.f90
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 10 ; $(FC) -c $(FCFLAGS) $(PROMOTION) $(FCSUFFIX) $*.f90 ; \
#PGI	fi
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 10 ; $(FC) -c $(FCFLAGS) $(PROMOTION) $(FCSUFFIX) $*.f90 ; \
#PGI	fi

.c.o:
	$(RM) $@
	$(CC) -o $@ -c $(CFLAGS) $*.c

###########################################################
#ARCH    PC Linux x86_64 (IA64 and Opteron), PGI compiler 5.2 or higher  (Single-threaded, no nesting)
#        Note that for 5.1.x comment out -Mpia=fast
#
FC              =       pgf90
LD              =       pgf90
CC              =       gcc
SCC		=	$(CC)
SFC             =       $(FC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       -DLANDREAD_STUB
FCOPTIM		=	-fastsse #-Mipa=fast
FCDEBUG		=	#-g
#FCBASEOPTS      =       -w -byteswapio -Ktrap=fp -Mfree $(FCDEBUG)
FCBASEOPTS      =       -w -byteswapio -Mfree $(FCDEBUG)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG \
			-DLIMIT_ARGS -DLANDREAD_STUB
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF	=	-traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive)

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
          TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH    PC Linux x86_64 (IA64 and Opteron), PGI 5.2 or higher DM-Parallel   (RSL_LITE, MPICH, Allows nesting)
#        Note that for 5.1.x comment out -Mpia=fast
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
MAX_PROC        =       1024
FC              =       mpif90
LD              =       mpif90
CC              =       mpicc
SCC		=	gcc
SFC             =       pgf90
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       -DDM_PARALLEL \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE \
                        -DLANDREAD_STUB
FCOPTIM         =       -fastsse #-Mipa=fast
FCDEBUG		=	#-g
FCBASEOPTS      =       -w -byteswapio -Ktrap=fp -Mfree $(FCDEBUG)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DDM_PARALLEL \
			$(DA_ARCHFLAGS) \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG \
			-DLIMIT_ARGS -DLANDREAD_STUB -DNMM_NEST=$(WRF_NMM_NEST)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       -byteswapio CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF	=	-DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive)

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -byteswapio" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH    Intel Itanium2 ia64 madison Linux  (e.g. mpp2 at PNNL) , efc71 compiler DM-Parallel (RSL_LITE, MPICH, Allows nesting )
# Notes for running on PNNL cluster:
# 
# 1. source /home/oehmen/.mycshrc
# 2. source /home/mscf/intel7.1/compiler70/ia64/bin/efcvars.csh
# 
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL = 1
MAX_PROC   = 2000
FC         = mpif90
LD         = mpif90
CC         = mpicc
SCC        = gcc
SFC        = efc
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS     = -DDM_PARALLEL -w -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) \
             -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -size_lp64 -I/usr/lib/mpi/mpi_intel/include
FCOPTIM = -O2 -ftz
FCDEBUG = #-g
FCBASEOPTS = $(FCDEBUG) -w -FR -I$(INCLUDE) -cm 
FCNOOPTS = -O0 $(FCDEBUG) -FR -I$(INCLUDE) -w -cm 
FCFLAGS = $(FCOPTIM) $(FCBASEOPTS) $(OMP) -size_lp64 
ARCHFLAGS = $(COREDEFS) -DDM_PARALLEL \
            -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 -DNETCDF \
            $(DA_ARCHFLAGS) \
            -DGRIB1 CONFIGURE_GRIB2_FLAG -DLIMIT_ARGS 
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES = $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                  -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc  -I$(WRF_SRC_ROOT_DIR)/chem \
                  -I/usr/lib/mpi/mpi_intel/include
PERL = perl
REGISTRY = Registry
LIB = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) -LCONFIGURE_NETCDF_PATH/lib -lnetcdf -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
      $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time \
      -lmpifarg -lmpi -lelan -lintrins -lPEPCF90 -limf -lguide -lunwind -lpthread -L/opt/mlib/lib/linux -lveclib8
LDFLAGS = $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP        = /lib/cpp -traditional -C -P -traditional
POUND_DEF  = -DNO_RRTM_PHYSICS -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) \
             -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS   = -I$(LIBINCLUDE) $(ARCHFLAGS) $(COREDEFS) $(OMPCPP) -I$(INCLUDE) \
             -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -EP `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(POUND_DEF)
AR = ar ru
M4 = m4 -B 14000
RANLIB = ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       ecc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='mpicc -w -I.' \
	  FC="$(FC) $(PROMOTION) $(FCFLAGS) -cm -w " MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F

solve_interface.o \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCNOOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH titan.ncsa.uiuc.edu specific Intel Itanium2 ia64 mckinley Linux, efc compiler DM-Parallel (RSL_LITE, VMI, allows ARW and NMM nesting)
#
# Consider 'setenv F_UFMTENDIAN big' in your run scripts for big-endian output
# Note hard-coded paths to Mark Straka's accounts and ecc6 libs
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL = 1
INCLUDE = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC = 256
FC = efc -I.. -I/usr/local/vmi/mpich/include
LD = efc
CC = ecc -I. -I/usr/local/vmi/mpich/include
SCC		=	$(CC)
SFC = efc
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS = -DDM_PARALLEL -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE \
-DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -size_lp64
FCOPTIM = -O3 -ftz
FCDEBUG = #-g
FCBASEOPTS = $(FCDEBUG) -w -FR -I$(INCLUDE) -I. -cm
FCFLAGS = $(FCOPTIM) $(FCBASEOPTS) $(OMP) -size_lp64
ARCHFLAGS = $(COREDEFS) -DRSL_LITE -DDM_PARALLEL \
-DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 -DNETCDF \
$(DA_ARCHFLAGS) \
-DGRIB1 CONFIGURE_GRIB2_FLAG 
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES = $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
-I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL = perl
REGISTRY = Registry
LIB = -Vaxlib -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) -L/u/ncsa/straka/AUGUST.test/WRFV1/netcdfintel7/lib -lnetcdf -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L/usr/local/vmi/mpich/lib/ecc6 -lmpich -lfmpich -lvmi -ldl -lpthread -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS = $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP = /lib/cpp -C -P -traditional
POUND_DEF = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS = -traditional -I$(LIBINCLUDE) -C -P $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF) $(COREDEFS)
AR = ar ru
M4 = m4 -B 14000
RANLIB = ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       ecc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) -Vaxlib -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS) -w" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) -Vaxlib -I/usr/local/vmi/mpich/include $(FCDEBUG) $(FCFLAGS) -w" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -Vaxlib -I/usr/local/vmi/mpich/include $(FCDEBUG) $(FCFLAGS) -w" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" CPP="$(CPP)" RANLIB="$(RANLIB)" FC="$(SFC) $(PROMOTION) -Vaxlib -I/usr/local/vmi/mpich/include $(FCDEBUG) $(FCFLAGS) -w" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" RANLIB="$(RANLIB)" FC="$(SFC) $(PROMOTION) -Vaxlib -I/usr/local/vmi/mpich/include $(FCDEBUG) $(FCFLAGS) -w" archive)

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='ecc -Vaxlib -I. -cm -w -I/usr/local/vmi/mpich/include' \
	FC="$(FC) $(PROMOTION) $(FCFLAGS) -cm -w -Vaxlib -I$(WRF_SRC_ROOT_DIR)/.. " MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F

solve_interface.o \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH AMD x86_64 Intel xeon i686 ia32 Xeon Linux, ifort compiler (single-threaded, no nesting)
#
OMP             =
OMPCPP          =
FC		=	ifort
CC              =       gcc
SCC		=	$(CC)
SFC		=	$(FC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS	=	`expr $(RWORDSIZE) \* 8`
PROMOTION	=	-real_size $(RSIZEBITS)
FCDEBUG         =       # -g
FCBASEOPTS      =       -w -FR -cm -I. -Vaxlib -convert big_endian -mp
FCOPTIM		=	-O2
FCFLAGS		=	$(FCOPTIM) $(FCBASEOPTS) $(OMP)
CFLAGS		=       -w
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
ARCHFLAGS       =       $(COREDEFS)  -DLIMIT_ARGS -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) \
			$(DA_ARCHFLAGS) \
                        -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG
LD		=	$(FC)
LDFLAGS		=	$(FCFLAGS) $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP		=	/lib/cpp -traditional
POUND_DEF	=	$(OMPCPP) $(COREDEFS) -DNONSTANDARD_SYSTEM \
                        -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS	=	-I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =	CONFIGURE_NETCDF_LIB_PATH $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time \
			-L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share
AR              =       ar ru
M4              =       m4 -B14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -FR -I. -w" )

wrfio_grib_share : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
	  FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCFLAGS) -w" archive)

wrfio_grib1 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCFLAGS) -w" archive)

wrfio_grib2 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCFLAGS) -w" FIXED="-fixed" archive)

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -w" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
start_domain.o : start_domain.F
wrf_bdyin.o : wrf_bdyin.F
wrf_bdyout.o : wrf_bdyout.F
wrf_histin.o : wrf_histin.F
wrf_histout.o : wrf_histout.F
wrf_inputin.o : wrf_inputin.F
wrf_inputout.o : wrf_inputout.F
wrf_restartin.o : wrf_restartin.F
wrf_restartout.o : wrf_restartout.F

wrf_bdyin.o wrf_bdyout.o  \
wrf_histin.o wrf_histout.o  \
wrf_inputin.o wrf_inputout.o  \
wrf_restartin.o wrf_restartout.o  \
solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o  start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(OMP) $*.f90

module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
module_configure.o : module_configure.F

module_configure.o \
module_dm.o module_comm_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(OMP) -g -O0 $*.f90

###########################################################
#ARCH   AMD x86_64 Intel xeon i686 ia32 Xeon Linux, ifort compiler (OpenMP)
#
# Note: if you use ifort 8.0, please remove option -xW (for vectorization). This option 
#       has been identified to produce wrong results occationally.
#
OMP             =       -openmp -fpp -auto
OMPCPP          =       -D_OPENMP
FC              =       ifort
LD              =       ifort
CC              =       gcc
SCC		=	$(CC)
SFC             =       $(FC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS	=	`expr $(RWORDSIZE) \* 8`
PROMOTION	=	-real_size $(RSIZEBITS)
CFLAGS          =
FCOPTIM		=	-O3 # -xW
FCDEBUG		=	#-g
FCBASEOPTS      =       -FR -cm -w -I. $(FCDEBUG) -convert big_endian -mp
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG \
			-DLIMIT_ARGS 
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
			-L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	$(FCFLAGS) $(FCFLAGS) $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -traditional
POUND_DEF	=	$(OMPCPP) $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS) -DGRIB1 CONFIGURE_GRIB2_FLAG
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
	  FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCFLAGS) -w" archive)

wrfio_grib1 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCFLAGS) -w" archive)

wrfio_grib2 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCFLAGS) -w" FIXED="-fixed" archive)

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
          TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
solve_em.o : solve_em.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F

solve_interface.o                                              \
solve_em.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
module_initialize_real.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(OMP) $(MODULE_DIRS) $*.f90

module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
module_configure.o : module_configure.F

module_configure.o \
module_dm.o module_comm_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) -g -O0 $*.f90

###########################################################
#ARCH    AMD x86_64 Intel xeon i686 ia32 Xeon Linux, ifort+gcc compiler  DM-Parallel (RSL_LITE, MPICH)
#
# Note: if you use ifort 8.0, please remove option -xW (for vectorization). This option 
#       has been identified to produce wrong results occationally.
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#
DMPARALLEL      =       1
MAX_PROC        =       1024
FC              =       mpif90 -f90=ifort
LD              =       mpif90 -f90=ifort
CC              =       mpicc -cc=gcc
SCC		=	gcc
SFC             =       ifort
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS	=	`expr $(RWORDSIZE) \* 8`
PROMOTION	=	-real_size $(RSIZEBITS)
FCOPTIM		=	-O3 # -xW
FCDEBUG		=	#-g
FCBASEOPTS      =       -FR -cm -w -I. $(FCDEBUG) -convert big_endian -mp
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG \
			$(DA_ARCHFLAGS) \
                        -DMPI  \
			-DLIMIT_ARGS 
CFLAGS          =       -w -DDM_PARALLEL $(ARCHFLAGS) \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
			-L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS         =       $(FCOPTIM) -convert big_endian CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -traditional
POUND_DEF	=	-DNO_RRTM_PHYSICS  $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS) -DGRIB1 CONFIGURE_GRIB2_FLAG
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       gcc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
	  FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCFLAGS) -w" archive)

wrfio_grib1 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCFLAGS) -w" archive)

wrfio_grib2 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCFLAGS) -w" FIXED="-fixed" archive)

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; \
          make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
start_domain.o : start_domain.F
solve_em.o : solve_em.F
start_em.o : start_em.F
mediation_integrate.o : mediation_integrate.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
module_initialize_real.o start_domain.o solve_em.o start_em.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
module_configure.o : module_configure.F

module_configure.o \
module_dm.o module_comm_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) -g -O0 $*.f90

###########################################################

#ARCH NEC SUPER-UX SX-6 (serial)

#***** some sx f90 compiler options***********
# -V : version # of f90 command to stderr
#-EP : activate cpp preprocessor to perform conditional compiling: output as i.[filename]
#-Ep: activate cpp preprocessor to perfomr conditional compiling
   #****However, cpp also activated by using .F or .F90 suffixes...
# -Wf: specifies option string of the f90/sx detailed options
#-g: debug info generated in object file for dbx symbolic debugging
# -ew : all numbers size=8bytes
#-eW: 4 bytes
# -float0: default and only -float(number) option for sx6
# -USX: unname the prev. defined reserved symbol SX of the preprocessor
   # -U overrides -D, so '-USX  -D$(RUNTIMESYSTEM)'  might be redundant
# -p: object file in execution format corresp. to 'prof' command be generated
# -f4: input source program is described in F90 standard free format
# -w: only syntax diagnostic messages at the fatal level are output
# -C: specifies compile mode
#   ssafe: only safe optimization in scalar mode (minimize side effects of 
#          opt. no loop unrolling, etc
# -init : init stack and heap areas
# -L fmtlist summary stdout: formatted list, transformation lists, summary list are output to stdout

RUNTIME_SYSTEM	=	sx
MPP_TARGET	=	$(RUNTIME_SYSTEM)
FC		=	f90
SFC		=	$(FC)
CC		=	cc
SCC		=	$(CC)
LD		=	$(FC)
NATIVE_RWORDSIZE =      8
RWORDSIZE       =       CONFIGURE_RWORDSIZE
ARCHFLAGS	= $(COREDEFS)	-DNETCDF -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DWRF_RSL_IO -DIWORDSIZE=8 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=8 -DLIMIT_ARGS -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) $(DA_ARCHFLAGS)
PROMOTION	=	
CFLAGS		=	$(ARCHFLAGS)

FCFLAGS		=	-w -Ep -C ssafe \
			-sx6 -USX -ew -D$(RUNTIME_SYSTEM) -I$(LIBINCLUDE) -I$(WRF_SRC_ROOT_DIR)/inc -f4 
		#	-Wf"-init stack=zero heap=zero" 
		#         -Wf"-L transform fmtlist summary stdout" -g
FCDEBUG         =       # -g
FCBASEOPTS	=	$(FCFLAGS) -w

# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  \
                        -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf -L/usr/local/netcdf/current/lib -lnetcdf -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			-L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o

#-lmpi for 4byte storage, -lmpiw for 8 byte storage 
#LDOPTIONS	=	-lmpiw -ew 
CPP		=	/lib/cpp 
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS	=	-I$(LIBINCLUDE) -C -P $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF) $(ARCHFLAGS)

MAX_PROC = 8
MAKE = make -i -r
AWK = awk
SED = sed
CAT = cat
CUT = cut
EXPAND = expand
AR = ar ru
M4 = m4 -B14000
RANLIB = ar ru     
NETCDFPATH = /usr/local/netcdf/current
CC_TOOLS        =       $(CC)
ARCH_OBJS = milliclock.o
ASSUME_HOMOGENEOUS_ENVIRONMENT = 1
FLIC_MACROS = LMvpp.m4 -B 14000
VECTOR = 1


externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int  esmf_time  module_dm.F fftpack

module_dm.F:
	( /sbin/cp module_dm_warning module_dm.F ; \
	  cat module_dm_stubs.F  >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=/usr/local/netcdf/current FC="$(FC) $(PROMOTION) $(FCFLAGS)"  )


wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
	  make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCFLAGS)" archive)

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ;\
 	make FC="$(FC) $(PROMOTION) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) $(CPPFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F
   
solve_interface.o                                              \
shift_domain_em.o                                              \
module_configure.o                                             \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o  start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCFLAGS) $(MODULE_DIRS) $*.f90

############################################################
#ARCH    SGI Altix, Intel Itanium2 ia64 Linux, ifort+icc 9.x,10.x DM-Parallel (SGI MPI, OpenMP, RSL_LITE, allows nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#
#        Hybrid OpenMP+MPI configurations might be helpfull to improve  scaling for multicore architecures
#        and  reasonably large workloads (i.e. for CONUT12km hybrid configurations are not likely to give any
#        performance improvements).
#
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.
#
#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               = -openmp -fpp -auto
OMPCPP            = -D_OPENMP
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = /usr
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -openmp
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -ftz -align all -FR -convert big_endian \
                    -fno-alias -tpp2 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                    -L/usr/lib -lmpi -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

############################################################
#ARCH    SGI Altix, Intel Itanium2 ia64 Linux, ifort+icc 9.x,10.x DM-Parallel (SGI MPI, RSL_LITE, allows nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.
#
#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               =
OMPCPP            =
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = /usr
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -ftz -align all -FR -convert big_endian \
                    -fno-alias -tpp2 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                    -L/usr/lib -lmpi -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

############################################################
#ARCH    SGI Altix/Generic Intel Itanium2 ia64 Linux, ifort+icc 9.x,10.x SM-Parallel (OpenMP, no nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#
#        Hybrid OpenMP+MPI configurations might be helpfull to improve  scaling for multicore architecures
#        and  reasonably large workloads (i.e. for CONUT12km hybrid configurations are not likely to give any
#        performance improvements).
#
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.
#
#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        =
OMP               = -openmp -fpp -auto
OMPCPP            = -D_OPENMP
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          =
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c    -openmp
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -ftz -align all -FR -convert big_endian \
                    -fno-alias -tpp2 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO   \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                    CONFIGURE_NETCDF_LIB_PATH \
                     \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE)  -C -P  \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF  wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; \
          cat module_dm_stubs.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

############################################################
#ARCH    SGI Altix/Generic Intel Itanium2 ia64 Linux, ifort+icc 9.x,10.x Sequential (no nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.
#
#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        =
OMP               =
OMPCPP            =
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          =
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -ftz -align all -FR -convert big_endian \
                    -fno-alias -tpp2 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO   \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                    CONFIGURE_NETCDF_LIB_PATH \
                     \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE)  -C -P  \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF  wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; \
          cat module_dm_stubs.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

############################################################
#ARCH    SGI Altix, Dual-Core Intel Itanium2 Processor 9000 Sequence ia64 Linux, ifort+icc 9.x,10.x DM-Parallel (SGI MPI, OpenMP, RSL_LITE, allows nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#
#        Hybrid OpenMP+MPI configurations might be helpfull to improve  scaling for multicore architecures
#        and  reasonably large workloads (i.e. for CONUT12km hybrid configurations are not likely to give any
#        performance improvements).
#
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.
#
#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               = -openmp -fpp -auto
OMPCPP            = -D_OPENMP
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = /usr
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -openmp
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -ftz -align all -FR -convert big_endian \
                    -fno-alias -mtune=itanium2-p9000 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                    -L/usr/lib -lmpi -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# OpenMP workaround for solve_em.F
# This should be fixed in newer versions of Intel Fortran Compiler (somewhere after 9.1.041).
# You can check if you really need this workaround by building without the following rule
# and making sure that output of "nm solve_em.o | grep kmp" contains kmpc_fork_call.
solve_em.o : solve_em.F
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC)  -c $(FCBASEOPTS) $(FCDEBUG) $(OMP) -O0 -override-limits $(MODULE_DIRS) $*.f90

############################################################
#ARCH    SGI Altix, Dual-Core Intel Itanium2 Processor 9000 Sequence ia64 Linux, ifort+icc 9.x,10.x DM-Parallel (SGI MPI, RSL_LITE, allows nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.
#
#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               =
OMPCPP            =
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = /usr
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -ftz -align all -FR -convert big_endian \
                    -fno-alias -mtune=itanium2-p9000 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                    -L/usr/lib -lmpi -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

############################################################
#ARCH    SGI Altix/Generic Dual-Core Intel Itanium2 Processor 9000 Sequence ia64 Linux, ifort+icc 9.x,10.x SM-Parallel (OpenMP, no nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#
#        Hybrid OpenMP+MPI configurations might be helpfull to improve  scaling for multicore architecures
#        and  reasonably large workloads (i.e. for CONUT12km hybrid configurations are not likely to give any
#        performance improvements).
#
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.
#
#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        =
OMP               = -openmp -fpp -auto
OMPCPP            = -D_OPENMP
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          =
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c    -openmp
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -ftz -align all -FR -convert big_endian \
                    -fno-alias -mtune=itanium2-p9000 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO   \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                    CONFIGURE_NETCDF_LIB_PATH \
                     \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE)  -C -P  \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF  wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; \
          cat module_dm_stubs.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# OpenMP workaround for solve_em.F
# This should be fixed in newer versions of Intel Fortran Compiler (somewhere after 9.1.041).
# You can check if you really need this workaround by building without the following rule
# and making sure that output of "nm solve_em.o | grep kmp" contains kmpc_fork_call.
solve_em.o : solve_em.F
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC)  -c $(FCBASEOPTS) $(FCDEBUG) $(OMP) -O0 -override-limits $(MODULE_DIRS) $*.f90

############################################################
#ARCH    SGI Altix/Generic Dual-Core Intel Itanium2 Processor 9000 Sequence ia64 Linux, ifort+icc 9.x,10.x Sequential (no nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.
#
#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        =
OMP               =
OMPCPP            =
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          =
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -ftz -align all -FR -convert big_endian \
                    -fno-alias -mtune=itanium2-p9000 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO   \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                    CONFIGURE_NETCDF_LIB_PATH \
                     \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE)  -C -P  \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF  wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; \
          cat module_dm_stubs.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )
fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90


###########################################################
#ARCH   UNICOS/mp  machine crayx1 (RSL_LITE, MPI, MSP mode)
#
#  Cray X1 (RSL_LITE, MPI, MSP mode)
#  For CSD mode set numtiles=4 in &domains section
#  in namelist.input for best MSP efficiency.
#
DMPARALLEL      =       1
MAX_PROC         =       1024
FC              =       ftn
SFC		=	$(FC)
LD              =       ftn
CC              =       cc
SCC		=	$(CC)

#### Override default sed command and script for Fortran source files ####
#### This sed script converts !$OMP directives to !csd$ directives ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/cray_csd.sed

## Use these for X1 cross compiler to build Registry
##X1_CROSS_COMP = "gcc"
##X1_CROSS_CFLG = ""
## Use these for X1 native (trigger) compiler
X1_CROSS_COMP = "cc"
X1_CROSS_CFLG = "-hcommand"
CC_TOOLS        = 	$(X1_CROSS_COMP) $(X1_CROSS_CFLG)

RWORDSIZE         = CONFIGURE_RWORDSIZE
FCDEBUG         =       # -g
FCBASEOPTS      =       -f free -N 255 -I. -x omp -dy
FCFLAGS_LOWOPT  =       $(FCBASEOPTS) -O1
FCFLAGS         =       $(FCBASEOPTS) -Ofp3 -O3 -Ogen_private_callee
#if using 64bit precision
#PROMOTION	=	-sreal64 -dp -sinteger32
CFLAGS          =       -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -DMAXDOM_MAKE=$(MAX_DOMAINS) \
                        -DMAXPROC_MAKE=$(MAX_PROC) -DDM_PARALLEL -UCRAY -DLANDREAD_STUB -Dcrayx1

# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/inc \
			-p./ -p$(WRF_SRC_ROOT_DIR)/external/io_netcdf -p$(WRF_SRC_ROOT_DIR)/external/io_int -p$(WRF_SRC_ROOT_DIR)/frame \
                        -p$(WRF_SRC_ROOT_DIR)/frame -p$(WRF_SRC_ROOT_DIR)/share -p$(WRF_SRC_ROOT_DIR)/phys -p$(WRF_SRC_ROOT_DIR)/chem \
                        -p$(WRF_SRC_ROOT_DIR)/dyn_em -p $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90
ARCHFLAGS       =       $(COREDEFS) -DRSL_LITE -DDM_PARALLEL -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) \
                        -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO \
			$(DA_ARCHFLAGS) \
			-DLIMIT_ARGS -Dcrayx1

PERL            =       perl
REGISTRY        =       Registry

LIB             =       -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
			-L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int  \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
			-L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time -lmalloc

ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
LDFLAGS         =       

CPP		=	cpp -C -P -Dcrayx1
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS) # 
CPPFLAGS	=	-I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)

AR              =       ar ru
M4              =       m4 -B14000
RANLIB          =       echo
NETCDFPATH	=	CONFIGURE_NETCDF_PATH

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP) -Dcrayx1" FC="$(FC) $(PROMOTION) -f free -N 255 " )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) -f free -N 255" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP) -Dcrayx1" FC="$(FC) $(PROMOTION) -f free -N 255" archive)

wrfio_grib1 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC) -UCRAY" CPP="$(CPP) -Dcrayx1" RANLIB="$(RANLIB)" \
          FC="$(FC) $(PROMOTION) -f free -N 255" archive )
wrfio_grib2 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) -UCRAY" CPP="$(CPP) CONFIGURE_GRIB2_INC -Dcrayx1" RM="$(RM)" RANLIB="$(RANLIB)" \
          FC="$(SFC) $(PROMOTION) -f free -N 255" archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) -f free -N 255" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CFLAGS="$(CFLAGS)" CC="$(CC)" FC="$(FC) $(PROMOTION) $(FCFLAGS)" \
                                     MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
convert_nmm.o : convert_nmm.F
module_configure.o : module_configure.F
solve_em.o : solve_em.F
solve_interface.o : solve_interface.F
wrf_restartout.o : wrf_restartout.F
wrf_restartin.o : wrf_restartin.F
input_wrf.o : input_wrf.F
output_wrf.o : output_wrf.F

module_io_mm5.o module_si_io.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o \
mediation_interp_domain.o \
mediation_force_domain.o \
module_configure.o solve_em.o \
input_wrf.o output_wrf.o \
solve_interface.o wrf_restartout.o wrf_restartin.o \
convert_nmm.o    :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCFLAGS_LOWOPT) $(MODULE_DIRS)  $*.f90

###########################################################
#ARCH	HP-UX	PA8600	32bit   (single-threaded, no nesting)
#
OMP             =       
OMPCPP          =       
FC              =       f90
SFC		=	$(FC)
LD              =       f90
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
ARCHFLAGS       =       $(COREDEFS) CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DLIMIT_ARGS -DFLOATSAFE \
			$(DA_ARCHFLAGS) \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       $(ARCHFLAGS) +DS2.0a -DNOUNDERSCORE
FCOPTIM         =       +O3 +DA2.0N +DS2.0a +Odataprefetch +Olibcalls +DO11.0EP9806 +noppu \
			+save +fastallocatable +Ofltacc +extend_source +source=free +FPD
FCDEBUG         =       # -g
FCBASEOPTS      =       +U77 +source=free -I. +DS2.0a +noppu +Onoopenmp $(FCDEBUG)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCOPTIM) $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =        /lib/cpp
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B14000
RANLIB          =       echo
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) " )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " archive)

wrfio_grib1 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" RANLIB="$(RANLIB)" \
          FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " archive )
wrfio_grib2 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC)" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" \
          FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
mediation_integrate.o : mediation_integrate.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_configure.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o mediation_integrate.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCFLAGS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH	HP-UX	Itanium2	(single-threaded, no nesting)
#
OMP             =       
OMPCPP          =       
FC              =       f90
SFC		=	$(FC)
LD              =       f90
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
ARCHFLAGS       =       $(COREDEFS) CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DLIMIT_ARGS -DFLOATSAFE \
			$(DA_ARCHFLAGS) \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       $(ARCHFLAGS) +DSitanium2 -DNOUNDERSCORE
FCOPTIM         =       +O3 +Odataprefetch +Olibcalls +DO11.23 +noppu \
			+save +fastallocatable +Ofltacc +extend_source +source=free +FPD
FCDEBUG         =       # -g
FCBASEOPTS      =       +U77 +source=free -I. +DSitanium2 +noppu +Onoopenmp $(FCDEBUG)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCOPTIM) $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =        /lib/cpp
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B14000
RANLIB          =       echo
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) " )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " archive)

wrfio_grib1 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" RANLIB="$(RANLIB)" \
          FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " archive )
wrfio_grib2 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC)" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" \
          FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
mediation_integrate.o : mediation_integrate.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_configure.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o mediation_integrate.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCFLAGS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH	HP-UX	PA8600		32bit   (openmp, no nesting)
#
OMP             =      	+Oopenmp 
OMPCPP          =       -D_OPENMP
FC              =       f90
SFC		=	$(FC)
LD              =       f90
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
ARCHFLAGS       =       $(COREDEFS) CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DLIMIT_ARGS -DFLOATSAFE \
			$(DA_ARCHFLAGS) \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       $(ARCHFLAGS) +DS2.0a -DNOUNDERSCORE
FCOPTIM         =       +O3 +DA2.0N +DS2.0a +Odataprefetch +Olibcalls +DO11.0EP9806 +noppu \
			+save +fastallocatable +Ofltacc +extend_source +source=free +FPD
FCDEBUG         =       # -g
FCBASEOPTS      =       +U77 +source=free -I. +DS2.0a $(FCDEBUG)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCOPTIM) $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =        /lib/cpp
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B14000
RANLIB          =       echo
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) " )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " archive)

wrfio_grib1 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" RANLIB="$(RANLIB)" \
          FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " archive )
wrfio_grib2 : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC)" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" \
          FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc " archive )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
mediation_integrate.o : mediation_integrate.F
start_domain.o : start_domain.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_configure.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o mediation_integrate.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCFLAGS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH Darwin		(single-threaded, xlf, no nesting)
#     
#     Using -qfloat=nomaf option can result in identical results with
#           non-optimized and optimized results (suggested by Fovell of UCLA)
#           One may turn on by uncommenting it in FCOPTIM line
#
FC              =       xlf90_r
SFC		=	$(FC)
LD              =       xlf90_r
#CC              =       cc_r
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       = CONFIGURE_RWORDSIZE
PROMOTION	=	-qrealsize=$(RWORDSIZE) -qintsize=4
CFLAGS          =       -DNOUNDERSCORE -DLANDREAD_STUB -I /usr/include/sys -DMACOS
FCOPTIM         =       -O3 -qarch=auto #-qfloat=nomaf
FCDEBUG         =       # -qnoopt -qfullpath
FCBASEOPTS      =       -qsave $(FCDEBUG) -qmaxmem=32767 -qspillsize=32767 -w 
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
FCSUFFIX        =       -qsuffix=f=f90
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG \
			-DLIMIT_ARGS  -DLANDREAD_STUB -DMAC_KLUDGE
#			-DLIMIT_ARGS  -DNATIVE_MASSV -DMACOS
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
#LIB             =       CONFIGURE_NETCDF_LIB_PATH -lmass -lmassv 
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 

LDFLAGS         =	 -Wl,-stack_size,10000000,-stack_addr,0xc0000000 CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
#CPP             =       /opt/ibmcmp/xlf/8.1/exe/cpp -C -P
CPP             =       /usr/bin/cpp  -C -P -xassembler-with-cpp
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF) 
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC -qcpluscmt" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" FREE="" FIXED="-qfixed" archive)

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

solve_interface.o : solve_interface.F
	$(RM) $@
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.F > $*.f90
	$(FC) -c -qfree=f90 -qspillsize=32767 -I. $(PROMOTION) $(MODULE_DIRS) $(FCSUFFIX) $*.f90

# compile these without high optimization to speed compile
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
solve_em.o : solve_em.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
convert_nmm.o : convert_nmm.F
module_configure.o : module_configure.F

module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o \
shift_domain_em.o                                              \
mediation_interp_domain.o \
module_configure.o                                             \
solve_em.o \
convert_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $*.f90

###########################################################
#ARCH Darwin		(OpenMP, xlf, no nesting)
#     
#     Using -qfloat=nomaf option can result in identical results with
#           non-optimized and optimized results (suggested by Fovell of UCLA)
#           One may turn on by uncommenting it in FCOPTIM line
#
OMP             =       -qsmp=noauto
OMPCPP          =       -D_OPENMP
FC              =       xlf90_r
SFC		=	$(FC)
LD              =       xlf90_r
CC              =       cc
SCC		=	$(CC)
RWORDSIZE       = CONFIGURE_RWORDSIZE
PROMOTION	=	-qrealsize=$(RWORDSIZE) -qintsize=4
CFLAGS          =       -DNOUNDERSCORE -DLANDREAD_STUB -I /usr/include/sys -DMACOS
FCOPTIM         =       -O2 -qarch=auto -qunroll=yes #-qfloat=nomaf
FCDEBUG         =       # -qnoopt -qfullpath
FCBASEOPTS      =       -w -qsave $(FCDEBUG) -qmaxmem=32767 -qspillsize=32767 #-qflttrap=zerodivide:invalid:enable -qsigtrap
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
FCSUFFIX        =       -qsuffix=f=f90
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG \
			-DLIMIT_ARGS  -DLANDREAD_STUB -DMACOS -DMAC_KLUDGE
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -lxlsmp \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	$(OMP) -Wl,-stack_size,10000000,-stack_addr,0xc0000000  CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =        /usr/bin/cpp -C -P -xassembler-with-cpp
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(OMPCPP) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC -qcpluscmt" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" FREE="" FIXED="-qfixed" archive)

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )


module_configure.o : module_configure.F
module_domain.o   : module_domain.F
module_sm.o 	: module_sm.F
module_tiles.o	: module_tiles.F
solve_em.o	: solve_em.F
solve_exp.o	: solve_exp.F
convert_nmm.o   : convert_nmm.F

module_configure.o module_sm.o module_tiles.o solve_em.o solve_exp.o convert_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c -g $(PROMOTION) $(OMP) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) -qnoopt -qnohot $*.f90

module_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F90 > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c -g $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) -qnoopt -qnohot $*.f90

###########################################################
#ARCH Darwin		(OpenMP, pgf90, no nesting)
#     
#     Using -qfloat=nomaf option can result in identical results with
#           non-optimized and optimized results (suggested by Fovell of UCLA)
#           One may turn on by uncommenting it in FCOPTIM line
#
OMP             =       -mp
OMPCPP          =       -D_OPENMP
FC              =       pgf90
LD              =       pgf90
CC              =       pgcc
SCC		=	$(CC)
SFC             =       $(FC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       -DMACOS
FCOPTIM		=	-O2 # -fast
FCDEBUG		=	#-g
#FCBASEOPTS      =       -w -byteswapio -Ktrap=fp -Mfree $(FCDEBUG)
FCBASEOPTS      =       -w -byteswapio -Mfree $(FCDEBUG) # -Mlfs
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DMACOS \
			-DLIMIT_ARGS 
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	$(FCFLAGS) $(OMP) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /usr/bin/cpp  -C -P -xassembler-with-cpp
POUND_DEF	=	$(OMPCPP) -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
          TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_integrate.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(OMP) $*.f90

###########################################################
#ARCH Darwin		(ifort, single-threaded, no nesting)
#     
#     Using -qfloat=nomaf option can result in identical results with
#           non-optimized and optimized results (suggested by Fovell of UCLA)
#           One may turn on by uncommenting it in FCOPTIM line
#
OMP             =       
OMPCPP          =       
FC              =       ifort
LD              =       ifort
CC              =       gcc
SCC		=	$(CC)
SFC             =       $(FC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS       =       `expr $(RWORDSIZE) \* 8`
PROMOTION       =       -real_size $(RSIZEBITS)
CFLAGS          =       -DMACOS
FCOPTIM		=	-O3 # -fast
FCDEBUG		=	#-g
FCBASEOPTS      =       -FR -cm -w -I. $(FCDEBUG) -convert big_endian -mp
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DMACOS \
			-DLIMIT_ARGS 
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	$(FCFLAGS) $(OMP) CONFIGURE_LDFLAGS -i-static -static-libcxa
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /usr/bin/cpp  -C -P -xassembler-with-cpp
POUND_DEF	=	$(OMPCPP) -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
          TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_integrate.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(OMP) $*.f90


###########################################################
#ARCH Darwin		(ifort, single-threaded, nesting, RSL_LITE w/o MPI)
#     
#     Using -qfloat=nomaf option can result in identical results with
#           non-optimized and optimized results (suggested by Fovell of UCLA)
#           One may turn on by uncommenting it in FCOPTIM line
#
OMP             =       
OMPCPP          =       
FC              =       ifort
LD              =       ifort
CC              =       gcc
SCC		=	$(CC)
SFC             =       $(FC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS       =       `expr $(RWORDSIZE) \* 8`
PROMOTION       =       -real_size $(RSIZEBITS)
CFLAGS          =       -DMACOS -DSTUBMPI
FCOPTIM		=	-O3 # -fast
FCDEBUG		=	#-g
FCBASEOPTS      =       -FR -cm -w -I. $(FCDEBUG) -convert big_endian -mp -DSTUBMPI
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DMACOS \
			-DLIMIT_ARGS 
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	$(FCFLAGS) $(OMP) CONFIGURE_LDFLAGS -i-static -static-libcxa
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /usr/bin/cpp  -C -P -xassembler-with-cpp
POUND_DEF	=	$(OMPCPP) -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
          TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC) $(CFLAGS)" FC="$(FC) $(FCFLAGS) $(PROMOTION) -byteswapio" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_integrate.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(OMP) $*.f90

###########################################################
#ARCH Darwin		(OpenMP, ifort, no nesting)
#     
#     Using -qfloat=nomaf option can result in identical results with
#           non-optimized and optimized results (suggested by Fovell of UCLA)
#           One may turn on by uncommenting it in FCOPTIM line
#
OMP             =       -openmp -fpp -auto
OMPCPP          =       -D_OPENMP
FC              =       ifort
LD              =       ifort
CC              =       gcc
SCC		=	$(CC)
SFC             =       $(FC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
RSIZEBITS       =       `expr $(RWORDSIZE) \* 8`
PROMOTION       =       -real_size $(RSIZEBITS)
CFLAGS          =       -DMACOS
FCOPTIM		=	-O3 # -fast
FCDEBUG		=	#-g
FCBASEOPTS      =       -FR -cm -w -I. $(FCDEBUG) -convert big_endian -mp
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG -DMACOS \
			-DLIMIT_ARGS 
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =	$(FCFLAGS) $(OMP) CONFIGURE_LDFLAGS -i-static -static-libcxa
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /usr/bin/cpp  -C -P -xassembler-with-cpp
POUND_DEF	=	$(OMPCPP) -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
          TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_integrate.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(OMP) $*.f90

###########################################################
#ARCH Darwin		(RSL_LITE, pgf90, OpenMP, allows nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
OMP             =       -mp
OMPCPP          =       -D_OPENMP
DMPARALLEL      =       1
MAX_PROC        =       1024
FC              =       mpif90 -f90=pgf90
LD              =       mpif90 -f90=pgf90
CC              =       mpicc -cc=pgcc
SCC		=	pgcc
SFC             =       pgf90
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       -DDM_PARALLEL \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -DMACOS
#FCOPTIM		=	-fastsse 
FCOPTIM		=	-O2 # -fast
FCDEBUG		=	#-g
#FCBASEOPTS      =       -w -byteswapio -Ktrap=fp -Mfree $(FCDEBUG)
FCBASEOPTS      =       -w -byteswapio -Mfree $(FCDEBUG) # -Mlfs
#Options for Debian Sarge systems
#FCBASEOPTS      =       -w -byteswapio -Mfree -Mipa=fast,inline,safe  $(FCDEBUG) # -Mlfs
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DDM_PARALLEL -DMACOS \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG \
			$(DA_ARCHFLAGS) \
			-DLIMIT_ARGS -DNMM_NEST=$(WRF_NMM_NEST)
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite $(OMP) \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       -byteswapio $(FCFLAGS) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /usr/bin/cpp  -C -P -xassembler-with-cpp
POUND_DEF	=	$(OMPCPP) -DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive)

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC) $(CFLAGS)" FC="$(FC) $(FCFLAGS) $(PROMOTION) -byteswapio" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_integrate.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(OMP) $*.f90

#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 10 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 30 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi
#PGI	if [ ! -e $@ ] ; then \
#PGI	sleep 300 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#PGI	fi

###########################################################
#ARCH Darwin		(single-threaded, no nesting, USES: gcc-3.3, xlf cpp, SystemStubs)
#     
#     Using -qfloat=nomaf option can result in identical results with
#           non-optimized and optimized results (suggested by Fovell of UCLA)
#           One may turn on by uncommenting it in FCOPTIM line
#
FC              =       xlf90_r
SFC		=	$(FC)
LD              =       xlf90_r
#CC              =       cc_r
CC              =       gcc-3.3
SCC		=	$(CC)
RWORDSIZE       = CONFIGURE_RWORDSIZE
PROMOTION	=	-qrealsize=$(RWORDSIZE) -qintsize=4
CFLAGS          =       -DNOUNDERSCORE -DLANDREAD_STUB -I /usr/include/sys -DMACOS
FCOPTIM         =       -O3 -qarch=auto #-qfloat=nomaf
FCDEBUG         =       # -qnoopt -qfullpath
FCBASEOPTS      =       -qsave $(FCDEBUG) -qmaxmem=32767 -qspillsize=32767 -w 
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
FCSUFFIX        =       -qsuffix=f=f90
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int  -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        CONFIGURE_NETCDF_FLAG \
			-DLIMIT_ARGS  -DLANDREAD_STUB -DMAC_KLUDGE
#			-DLIMIT_ARGS  -DNATIVE_MASSV -DMACOS
PERL            =       CONFIGURE_PERL_PATH
REGISTRY        =       Registry
#LIB             =       CONFIGURE_NETCDF_LIB_PATH -lmass -lmassv 
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 

LDFLAGS         =	 -Wl,-stack_size,10000000,-stack_addr,0xc0000000 CONFIGURE_LDFLAGS -L/usr/lib -lSystemStubs
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /opt/ibmcmp/xlf/8.1/exe/cpp -C -P
#CPP             =       /usr/bin/cpp  -C -P -xassembler-with-cpp
POUND_DEF	=	-DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(COREDEFS) $(ENVCOMPDEFS) $(POUND_DEF) 
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) -qarch=auto -qzerosize" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC -qcpluscmt" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCSUFFIX) -qarch=auto -qzerosize" FREE="" FIXED="-qfixed" archive)

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

solve_interface.o : solve_interface.F
	$(RM) $@
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.F > $*.f90
	$(FC) -c -qfree=f90 -qspillsize=32767 -I. $(PROMOTION) $(MODULE_DIRS) $(FCSUFFIX) $*.f90

# compile these without high optimization to speed compile
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
solve_em.o : solve_em.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_force_domain.o : mediation_force_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
convert_nmm.o : convert_nmm.F
module_configure.o : module_configure.F

module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_initialize_real.o module_dm.o module_comm_dm.o \
shift_domain_em.o                                              \
mediation_interp_domain.o \
module_configure.o                                             \
solve_em.o \
convert_nmm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $*.f90

###########################################################
#ARCH	Darwin g95	(Single-threaded, no nesting)
#
FC              =       g95
LD              =       g95
CC              =       gcc -DMACOS -DF2CSTYLE
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
SFC             =       $(FC)
# g95 does not like -r4. if you want promotion to -r8 add it to PROMOTION below
#PROMOTION	=	-r$(RWORDSIZE) -i4
PROMOTION	=	-i4
CFLAGS          =       
FCOPTIM		=	-O2 # -fast
FCDEBUG		=	#-g -O0
FCBASEOPTS      =       -Wno=101,139,155,158 -fendian=big -ffree-form -ffree-line-length-huge $(FCDEBUG) # -Mlfs
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         -DNETCDF -DGRIB1 -DLIMIT_ARGS -DG95 -DMACOS -DF2CSTYLE
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -fmod=$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCFLAGS) 
ENVCOMPDEFS	=	
WRF_CHEM	=	0 
CPP             =       /usr/bin/cpp -C -P -traditional
POUND_DEF	=	$(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the Fortran compiler complains about long source lines.          ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes wrfio_nf wrfio_grib_share wrfio_grib1  wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) " RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-ffixed-form" archive )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
          TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH     Darwin g95 compiler  DM-Parallel (RSL_LITE, MPICH, Allows nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
MAX_PROC        =       1024
FC              =       mpif90 -f90=g95
LD              =       mpif90 -f90=g95
CC              =       mpicc -cc=gcc -DMACOS -DF2CSTYLE
SCC		=	gcc -DMACOS -DF2CSTYLE
SFC             =       g95
RWORDSIZE       =       CONFIGURE_RWORDSIZE
# g95 does not like -r4. if you want promotion to -r8 add it to PROMOTION below
#PROMOTION      =       -r$(RWORDSIZE) -i4
PROMOTION       =       -i4
CFLAGS          =       -DDM_PARALLEL \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM		=	-O2 # -fast
FCDEBUG		=	#-g -O0
FCBASEOPTS      =       -Wno=101,139,155,158 -ffree-line-length-huge -fendian=big -ffree-form $(FCDEBUG) # -Mlfs
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DDM_PARALLEL \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG \
			$(DA_ARCHFLAGS) \
			-DLIMIT_ARGS -DNMM_NEST=$(WRF_NMM_NEST) -DG95 -DMACOS -DF2CSTYLE
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -fmod=$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
			-L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCFLAGS) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /usr/bin/cpp -C -P -traditional
POUND_DEF	=	-DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the Fortran compiler complains about long source lines.          ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-ffixed-form" archive)

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" FC="$(FC) $(FCFLAGS) $(PROMOTION)" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_integrate.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH    PC Linux x86_64 (IA64 and Opteron), PathScale 2.1 or higher (Single-threaded, no nesting)
#
FC              =       pathf90
LD              =       pathf90
CC              =       pathcc
SCC             =       $(CC)
NATIVE_RWORDSIZE=       4
RWORDSIZE       =       CONFIGURE_RWORDSIZE
SFC             =       $(FC)
PROMOTION       =       -r$(RWORDSIZE) -i4
CFLAGS          =       
FCOPTIM         =       -O3 -OPT:Ofast:Olimit=5000
FCDEBUG         =       #-g
FCBASEOPTS      =       -w -byteswapio -freeform -fno-second-underscore $(FCDEBUG) # -Mlfs
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG \
                        -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                        $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS         =       $(FCFLAGS) -byteswapio CONFIGURE_LDFLAGS
ENVCOMPDEFS     =       CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF       =       $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH      =       CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)
                                                                                
externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack
                                                                                
module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w -fno-second-underscore" TRADFLAG="-traditional" )
                                                                                
wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" archive )

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
	make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
	make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
	make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
	TRADFLAG="-traditional" all )
                                                                                
esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )
                                                                                
fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_fddaobs_rtfdda.o : module_fddaobs_rtfdda.F
module_configure.o : module_configure.F
                                                                                
solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
module_configure.o                                             \
module_fddaobs_rtfdda.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH    PC Linux x86_64 (IA64 and Opteron), PathScale 2.1 or higher DM-Parallel   (RSL_LITE, PathScale MPICH, No periodic LBCs)
#
DMPARALLEL      =       1
MAX_PROC        =       1024
FC              =       mpif90 -f90=pathf90
LD              =       mpif90 -f90=pathf90
CC              =       mpicc  -cc=pathcc
SCC             =       pathcc
SFC             =       pathf90
NATIVE_RWORDSIZE=	4
RWORDSIZE	=	CONFIGURE_RWORDSIZE
CFLAGS          =       -DDM_PARALLEL \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM         =       -O3 -OPT:Ofast:Olimit=5000
FCDEBUG         =       #-g
FCBASEOPTS      =       -w -byteswapio -freeform -fno-second-underscore $(FCDEBUG)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DINTIO -DDM_PARALLEL \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG \
			$(DA_ARCHFLAGS) \
                        -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
EXTRAMODULES    =
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                        $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS         =       -byteswapio
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF       =       -DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH      =       CONFIGURE_NETCDF_PATH
CC_TOOLS        =       pathcc
                                                                                
externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack
                                                                                
gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
	cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )
                                                                                
module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )
                                                                                
#io_flags:
#	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; make flags_only ; \
#	/bin/cp wrf_io_flags.h wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
#	/bin/cp wrf_io_flags.h wrf_status_codes.h ../io_phdf5 )
                                                                                
wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC)" TRADFLAG="-traditional" \
	FFLAGS='$(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/inc -ICONFIGURE_NETCDF_PATH/include -w -fno-second-underscore' RANLIB=$(RANLIB) )
                                                                                
wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" TRADFLAG="-traditional" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" archive )

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
	make CC="$(CC)" CPP="$(CPP)" FC="$(SFC) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" RANLIB=$(RANLIB) archive )
                                                                                
wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
	make CC="$(CC)" CPP="$(CPP) CONFIGURE_GRIB2_INC" FC="$(SFC) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" RM="$(RM)" RANLIB=$(RANLIB) archive )
                                                                                
wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
	make CC="$(CC)" CPP="$(CPP)" FC="$(SFC) $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" RANLIB=$(RANLIB) all )
                                                                                
esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	make FC="$(FC) $(FCDEBUG) $(FCBASEOPTS) " CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )
                                                                                
fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" FC='mpif90 $(FCFLAGS) -byteswapio' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )
                                                                                
# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_fddaobs_rtfdda.o : module_fddaobs_rtfdda.F
module_configure.o : module_configure.F
                                                                                
solve_interface.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
module_configure.o                                             \
module_fddaobs_rtfdda.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH    Cray XT3 Catamount/Linux x86_64 (Opteron), PGI 5.2 or higher DM-Parallel (RSL_LITE, MPICH, Allows nesting)
#        Note that for 5.1.x comment out -Mpia=fast
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
MAX_PROC        =       1024
FC              =       ftn
LD              =       ftn
CC              =       gcc -DMPI2_SUPPORT
SCC		=	gcc
SFC             =       mpif90
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4
CFLAGS          =       -DDM_PARALLEL \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE \
                        -DLANDREAD_STUB -DXT3_Catamount -I$(MPICH_DIR)/include
FCOPTIM         =       -O3 -fastsse #-Mipa=fast
FCDEBUG		=	#-g
#FCBASEOPTS      =       -w -byteswapio -Ktrap=fp -Mfree $(FCDEBUG)
FCBASEOPTS      =       -w -byteswapio -Mfree $(FCDEBUG)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DDM_PARALLEL \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG \
			$(DA_ARCHFLAGS) \
			-DLIMIT_ARGS -DLANDREAD_STUB  -DXT3_Catamount
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
# add this to LIB to use XT3 iobuf library after loading iobuf module, also requires
# properly built netCDF library that includes iobuf
#                       $(IOBUF_POST_LINK_OPTS)
LDFLAGS         =       -byteswapio CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF	=	-DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       gcc

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive)

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC) $(CFLAGS)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -byteswapio" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
solve_em.o : solve_em.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
solve_em.o \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH    NEC SX-8, NEC SX cross compiler DM-Parallel (RSL_LITE, Allows nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
MAX_PROC        =       1024
FC              =       sxmpif90
LD              =       sxmpif90
CC              =       sxmpic++
SCC		=	sxmpic++
SFC             =       sxmpif90
RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	
CFLAGS          =       -DNCARIBM_NOC99 -DDM_PARALLEL \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM		=	
FCDEBUG		=	#-g
#FCBASEOPTS      =       -w -byteswapio -Ktrap=fp -Mfree $(FCDEBUG)
FCBASEOPTS      =       -f4 -Wf,-P i $(FCDEBUG)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 -DINTIO -DDM_PARALLEL \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG \
			$(DA_ARCHFLAGS) \
			-DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time -L$(SX_BASE_CPLUS)/lib -lcpp
LDFLAGS         =       $(FCFLAGS) -Wl,-h nodefs CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF	=	-DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF) -DNEC
AR_BASE         =       sxar
AR              =       $(AR_BASE) ru
M4              =       m4 -B 14000
RANLIB          =       sxar rs
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the Fortran compiler complains about long source lines.          ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib1 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" AR="$(AR_BASE)" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" AR="$(AR_BASE)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" AR="$(AR_BASE)" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" AR="$(AR_BASE)" archive)

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" AR="$(AR_BASE)" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" AR="$(AR_BASE)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" FC="$(FC) $(PROMOTION)" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST AR="$(AR_BASE)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_integrate.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90
#	if [ ! -e $@ ] ; then \
#	sleep 10 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#	fi
#	if [ ! -e $@ ] ; then \
#	sleep 30 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#	fi
#	if [ ! -e $@ ] ; then \
#	sleep 300 ; $(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90 ; \
#	fi


###########################################################
#ARCH    CYGWIN_NT-5.1 Cygwin i486 i586 i686, g95 compiler  (Single-threaded, no nesting)
#
FC              =       g95
LD              =       g95
CC              =       gcc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
SFC             =       $(FC)
# g95 does not like -r8. if you want -r8, just add it to PROMOTION below
#PROMOTION	=	-r$(RWORDSIZE) -i4
PROMOTION	=	-i4
CFLAGS          =
FCOPTIM		=	-O2
FCDEBUG		=	#-g
FCBASEOPTS      =       -Wno=101,139,155,158 -fno-second-underscore -fendian=big -ffree-form $(FCDEBUG) # -Mlfs
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG \
			-DLIMIT_ARGS -DG95
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -fmod=$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCFLAGS) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       cpp -C -P -traditional
POUND_DEF	=	$(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the Fortran compiler complains about long source lines.          ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-ffixed-form" archive )


wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
          TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH    PC Linux i486 i586 i686, g95 compiler  (Single-threaded, no nesting)
#
FC              =       g95
LD              =       g95
CC              =       gcc
SCC		=	$(CC)
RWORDSIZE       =       CONFIGURE_RWORDSIZE
SFC             =       $(FC)
# g95 does not like -r4. if you want promotion to -r8 add it to PROMOTION below
#PROMOTION	=	-r$(RWORDSIZE) -i4
PROMOTION	=	-i4
CFLAGS          =       
FCOPTIM		=	-O2 # -fast
FCDEBUG		=	#-g -O0
FCBASEOPTS      =       -Wno=101,139,155,158 -fno-second-underscore -fendian=big -ffree-form -ffree-line-length-huge $(FCDEBUG) # -Mlfs
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                         CONFIGURE_NETCDF_FLAG -DGRIB1 CONFIGURE_GRIB2_FLAG \
			-DLIMIT_ARGS -DG95
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -fmod=$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCFLAGS) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF	=	$(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       $(CC)

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the Fortran compiler complains about long source lines.          ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 wrfio_int module_dm.F esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-ffixed-form" archive )

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" \
          TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

###########################################################
#ARCH     PC Linux i486 i586 i686, g95 compiler  DM-Parallel (RSL_LITE, MPICH, Allows nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
MAX_PROC        =       1024
FC              =       mpif90 -f90=g95
LD              =       mpif90 -f90=g95
CC              =       mpicc -cc=gcc
SCC		=	gcc
SFC             =       g95
RWORDSIZE       =       CONFIGURE_RWORDSIZE
# g95 does not like -r4. if you want promotion to -r8 add it to PROMOTION below
#PROMOTION      =       -r$(RWORDSIZE) -i4
PROMOTION       =       -i4
CFLAGS          =       -DDM_PARALLEL \
                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM		=	-O2 # -fast
FCDEBUG		=	#-g -O0
FCBASEOPTS      =       -Wno=101,139,155,158 -fno-second-underscore -fendian=big -ffree-form -ffree-line-length-huge $(FCDEBUG) # -Mlfs
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
ARCHFLAGS       =       $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DDM_PARALLEL \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 CONFIGURE_NETCDF_FLAG \
			$(DA_ARCHFLAGS) \
			-DLIMIT_ARGS -DNMM_NEST=$(WRF_NMM_NEST) -DG95
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -fmod=$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc
PERL            =       perl
REGISTRY        =       Registry
LIB             =       CONFIGURE_NETCDF_LIB_PATH -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                        CONFIGURE_GRIB2_LIB \
                        -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
			-L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
			$(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time 
LDFLAGS         =       $(FCFLAGS) CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF	=	-DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar ru
M4              =       m4 -B 14000
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc

#### Override default sed command and script for Fortran source files         ####
#### This sed script does not pass __FILE__ and __LINE__ to wrf_error_fatal() ####
#### because the Fortran compiler complains about long source lines.          ####
SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/no_file_line.sed

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make NETCDFPATH=CONFIGURE_NETCDF_PATH RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(SCC)" CFLAGS="$(CFLAGS) CONFIGURE_GRIB2_INC" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-ffixed-form" archive)

wrfio_int : 
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" FC="$(FC) $(FCFLAGS) $(PROMOTION)" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
module_configure.o                                             \
mediation_integrate.o \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90


###########################################################
#ARCH    PC Interix x86_64 (IA64 and Opteron), PGI 5.2 or higher DM-Parallel   (RSL_LITE, MPICH, Allows nesting)
#        Note that for 5.1.x comment out -Mpia=fast
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
DMPARALLEL      =       1
MAX_PROC        =       1024
FC              =       pgf90.exe
LD              =       $(FC)
CC              =       pgcc.exe
CC              =       cc
SCC		=	$(CC)
SFC             =       $(FC)

MPdir           =       /dev/fs/C/Program Files/Microsoft Compute Cluster Pack
MPinc           =       -I'$(MPdir)'/Include
MSMPdir         =       'C:\Program Files\Microsoft Compute Cluster Pack'
MSMPinc         =       /I'C:\Program Files\Microsoft Compute Cluster Pack\Include'
MSMPlib         =       'C:\Program Files\Microsoft Compute Cluster Pack\Lib\AMD64\msmpi.lib'

RWORDSIZE       =       CONFIGURE_RWORDSIZE
PROMOTION	=	-r$(RWORDSIZE) -i4

CFLAGS          =       -DLANDREAD_STUB -DMEMCPY_FOR_BCOPY -DMS_SUA -DDM_PARALLEL \
                        -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE $(MPinc) #-X /MD
FCOPTIM         =       -fastsse #-Mipa=fast
FCDEBUG		=	#-g
#FCBASEOPTS      =       -w -byteswapio -Ktrap=fp -Mfree $(FCDEBUG)
FCBASEOPTS      =       -w -byteswapio -Mfree $(FCDEBUG)
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS) $(MPinc)

ARCHFLAGS       =       $(COREDEFS) \
                        -DDM_PARALLEL \
                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
			$(DA_ARCHFLAGS) \
                        -DNETCDF -DINTIO \
                        -DNO_NAMELIST_PRINT  \
                        -DLIMIT_ARGS -DLANDREAD_STUB -DNMM_NEST=$(WRF_NMM_NEST) -DMEMCPY_FOR_BCOPY

# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS  =       
ESMF_IO_LIB     =       ESMFIOLIB
ESMF_IO_LIB_EXT =       ESMFIOEXTLIB
INCLUDE_MODULES =       -module $(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                        -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc -I$(WRF_SRC_ROOT_DIR)/chem
PERL            =       perl
REGISTRY        =       Registry

LIB             =       CONFIGURE_NETCDF_LIB_PATH \
                        $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5/libfftpack.a \
			$(WRF_SRC_ROOT_DIR)/external/io_int/libwrfio_int.a \
                        $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a \
                        $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a $(MSMPlib) \
                        "c:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib\AMD64\bufferoverflowu.lib"

LDFLAGS         =       -byteswapio CONFIGURE_LDFLAGS
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS
CPP             =       /lib/cpp -C -P -traditional
POUND_DEF	=	-DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P $(ENVCOMPDEFS) $(POUND_DEF)
AR              =       ar r
M4              =       NA
RANLIB          =       ranlib
NETCDFPATH	=	CONFIGURE_NETCDF_PATH
CC_TOOLS        =       cc
LIBWRFLIB       =       libwrflib.a

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
	  make LIBS="libwrfio_nf.a 'CONFIGURE_NETCDF_PATH' 'c:\Program Files\Microsoft Platform SDK\Lib\AMD64\bufferoverflowu.lib'" \
              NETCDFPATH=CONFIGURE_NETCDF_PATH \
              RANLIB="$(RANLIB)" CPP="$(CPP) -DMS_SUA" \
              CPP1="$(CPP) -DMS_SUA"  \
              FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )

wrfio_grib_share :

wrfio_grib1 :

wrfio_grib2 :

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" all )

esmf_time : 
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; \
          /bin/sed -e '/MPI_ADDRESS_KIND=4/d' -e '/DEC\$$/d' '$(MPdir)'/Include/mpif.h > mpif.h ; \
          make CPP="$(CPP) $(CPPFLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -byteswapio" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

# compile these without high optimization to speed compile
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_mm5.o : module_io_mm5.F
module_si_io.o : module_si_io.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_start.o : module_start.F
module_initialize.o : module_initialize.F
module_initialize_b_wave.o : module_initialize_b_wave.F
module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
module_initialize_real.o : module_initialize_real.F
module_dm.o : module_dm.F
module_comm_dm.o : module_comm_dm.F
start_domain.o : start_domain.F
mediation_integrate.o : mediation_integrate.F
module_configure.o : module_configure.F

solve_interface.o                                              \
shift_domain_em.o                                              \
module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
module_start.o module_initialize.o module_initialize_b_wave.o  \
module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
mediation_integrate.o \
module_configure.o                                             \
module_initialize_real.o module_dm.o module_comm_dm.o start_domain.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b 
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	$(FC) -o $*.o -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

module_io.o : module_io.F
module_dm.o : module_dm.F

module_io.o module_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
	$(RM) $*.b
	/bin/sed -e '/MPI_ADDRESS_KIND=4/d' -e '/DEC\$$/d' '$(MPdir)'/Include/mpif.h > mpif.h
	$(FC) -o $*.o -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90

############################################################
#ARCH    Generic Intel Itanium2 ia64 Linux, ifort+icc 9.x,10.x DM-Parallel (MPICH, OpenMP, RSL_LITE)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               = -openmp -fpp -auto
OMPCPP            = -D_OPENMP
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = $(MPICH)
FC                = $(MPI_HOME)/bin/mpif90 -f90=ifort
LD                = $(FC)
CC                = $(MPI_HOME)/bin/mpicc -cc=icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -openmp
FCOPTIM           = -O3 -unroll0
FCDEBUG           = # -O0 -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias -tpp2 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH
ENVCOMPDEFS     =       CONFIGURE_COMPILEFLAGS

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -O0 -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

############################################################
#ARCH    Generic Intel Itanium2 ia64 Linux, ifort+icc 9.x,10.x DM-Parallel (MPICH, RSL_LITE)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               =
OMPCPP            =
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = $(MPICH)
FC                = $(MPI_HOME)/bin/mpif90 -f90=ifort
LD                = $(FC)
CC                = $(MPI_HOME)/bin/mpicc -cc=icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM           = -O3 -unroll0
FCDEBUG           = # -O0 -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias -tpp2 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip -O0 $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

############################################################
#ARCH    Dual-Core Intel Itanium2 Processor 9000 Sequence ia64 Linux, ifort+icc 9.x,10.x DM-Parallel (MPICH, OpenMP, RSL_LITE)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               = -openmp -fpp -auto
OMPCPP            = -D_OPENMP
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = $(MPICH)
FC                = $(MPI_HOME)/bin/mpif90 -f90=ifort
LD                = $(FC)
CC                = $(MPI_HOME)/bin/mpicc -cc=icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -openmp
FCOPTIM           = -O3 -unroll0
FCDEBUG           = # -O0 -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias -mtune=itanium2-p9000 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# OpenMP workaround for solve_em.F
# This should be fixed in newer versions of Intel Fortran Compiler (somewhere after 9.1.041).
# You can check if you really need this workaround by building without the following rule
# and making sure that output of "nm solve_em.o | grep kmp" contains kmpc_fork_call.
solve_em.o : solve_em.F
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC)  -c $(FCBASEOPTS) $(FCDEBUG) $(OMP) -O0 -override-limits $(MODULE_DIRS) $*.f90

############################################################
#ARCH    Dual-Core Intel Itanium2 Processor 9000 Sequence ia64 Linux, ifort+icc 9.x,10.x DM-Parallel (MPICH, RSL_LITE)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.
#        To improve performance on Itanium2 architecture you might want to use '-IPF-fp-relaxed' flag, which enables
#        use of faster but slightly less accurate code sequences for math functions, such as divide and sqrt,
#        and enables the performance of more aggressive floating-point transformations, which may affect accuracy.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               =
OMPCPP            =
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = $(MPICH)
FC                = $(MPI_HOME)/bin/mpif90 -f90=ifort
LD                = $(FC)
CC                = $(MPI_HOME)/bin/mpicc -cc=icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM           = -O3 -unroll0
FCDEBUG           = # -O0 -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias -mtune=itanium2-p9000 \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

############################################################
#ARCH    Generic Intel 64 x86_64 Linux, ifort+icc 9.x,10.x DM-Parallel (MPICH, OpenMP, RSL_LITE)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin64/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin64/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               = -openmp -fpp -auto
OMPCPP            = -D_OPENMP
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = $(MPICH)
FC                = $(MPI_HOME)/bin/mpif90 -f90=ifort
LD                = $(FC)
CC                = $(MPI_HOME)/bin/mpicc -cc=icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -openmp
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias  \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# Force even lower optimization level for these files to decrease
# compilation time and lower memory demands
solve_em.o : solve_em.F
module_dm.o : module_dm.F

solve_em.o \
module_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) $(OMP) -O0 $(MODULE_DIRS) -mP2OPT_vec_xform_level=103 $*.f90

############################################################
#ARCH  Z  Generic Intel 64 x86_64 Linux, ifort+icc 9.x,10.x DM-Parallel (MPICH, RSL_LITE)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin64/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin64/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               =
OMPCPP            =
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = $(MPICH)
FC                = $(MPI_HOME)/bin/mpif90 -f90=ifort
LD                = $(FC)
CC                = $(MPI_HOME)/bin/mpicc -cc=icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias  \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH
ENVCOMPDEFS	=	CONFIGURE_COMPILEFLAGS

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# Force even lower optimization level for these files to decrease
# compilation time and lower memory demands
module_dm.o : module_dm.F
solve_em.o : solve_em.F

solve_em.o \
module_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) -O0 $(MODULE_DIRS) $*.f90

############################################################
#ARCH    Generic Intel 64 x86_64 Linux, ifort+icc 9.x,10.x SM-Parallel (OpenMP, no nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin64/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin64/mpiicc -nocompchk

DMPARALLEL        =
OMP               = -openmp -fpp -auto
OMPCPP            = -D_OPENMP
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          =
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c    -openmp
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias  \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO   \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                     \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE)  -C -P  \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF  wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; \
          cat module_dm_stubs.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# Force even lower optimization level for these files to decrease
# compilation time and lower memory demands
solve_em.o : solve_em.F
module_dm.o : module_dm.F

solve_em.o \
module_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) $(OMP) -O0 $(MODULE_DIRS) -mP2OPT_vec_xform_level=103 $*.f90

############################################################
#ARCH    Generic Intel 64 x86_64 Linux, ifort+icc 9.x,10.x Sequential (no nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin64/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin64/mpiicc -nocompchk

DMPARALLEL        =
OMP               =
OMPCPP            =
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          =
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c
FCOPTIM           = -O3
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias  \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO   \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                     \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE)  -C -P  \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF  wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; \
          cat module_dm_stubs.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# Force even lower optimization level for these files to decrease
# compilation time and lower memory demands
module_dm.o : module_dm.F
solve_em.o : solve_em.F

solve_em.o \
module_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) -O0 $(MODULE_DIRS) $*.f90

############################################################
#ARCH    Intel Core 2 Duo/Quad (Intel 64) x86_64 Linux, ifort+icc 9.x,10.x DM-Parallel (MPICH, OpenMP, RSL_LITE)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin64/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin64/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               = -openmp -fpp -auto
OMPCPP            = -D_OPENMP
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = $(MPICH)
FC                = $(MPI_HOME)/bin/mpif90 -f90=ifort
LD                = $(FC)
CC                = $(MPI_HOME)/bin/mpicc -cc=icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -openmp
FCOPTIM           = -O3 -xT
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias  \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# Force even lower optimization level for these files to decrease
# compilation time and lower memory demands
solve_em.o : solve_em.F
module_dm.o : module_dm.F

solve_em.o \
module_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) $(OMP) -O0 $(MODULE_DIRS) -mP2OPT_vec_xform_level=103 $*.f90

############################################################
#ARCH    Intel Core 2 Duo/Quad (Intel 64) x86_64 Linux, ifort+icc 9.x,10.x DM-Parallel (MPICH, RSL_LITE)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin64/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin64/mpiicc -nocompchk

DMPARALLEL        = 1
OMP               =
OMPCPP            =
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          = $(MPICH)
FC                = $(MPI_HOME)/bin/mpif90 -f90=ifort
LD                = $(FC)
CC                = $(MPI_HOME)/bin/mpicc -cc=icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c -DDM_PARALLEL  -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE
FCOPTIM           = -O3 -xT
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias  \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO -DRSL_LITE -DDM_PARALLEL \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                    -L$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -lrsl_lite \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE) -I$(WRF_SRC_ROOT_DIR)/external/RSL_LITE -C -P `cat $(WRF_SRC_ROOT_DIR)/inc/dm_comm_cpp_flags` \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals :  CONFIGURE_WRFIO_NF $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms.c wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

gen_comms.c : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c
	( /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )

module_dm.F : $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F
	( /bin/cp module_dm_warning module_dm.F ; \
          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F )

$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CPP="$(CPP) $(CPPFLAGS)" CC='$(CC) -I. $(CFLAGS) -DMPI2_SUPPORT -I$(MPI_HOME)/include '\
	 FC='$(FC) $(FCFLAGS) -I$(WRF_SRC_ROOT_DIR)/.. ' MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# Force even lower optimization level for these files to decrease
# compilation time and lower memory demands
module_dm.o : module_dm.F
solve_em.o : solve_em.F

solve_em.o \
module_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) -O0 $(MODULE_DIRS) $*.f90

############################################################
#ARCH    Intel Core 2 Duo/Quad (Intel 64) x86_64 Linux, ifort+icc 9.x,10.x SM-Parallel (OpenMP, no nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin64/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin64/mpiicc -nocompchk

DMPARALLEL        =
OMP               = -openmp -fpp -auto
OMPCPP            = -D_OPENMP
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          =
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c    -openmp
FCOPTIM           = -O3 -xT
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias  \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO   \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                     \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE)  -C -P  \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF  wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; \
          cat module_dm_stubs.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# Force even lower optimization level for these files to decrease
# compilation time and lower memory demands
solve_em.o : solve_em.F
module_dm.o : module_dm.F

solve_em.o \
module_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) $(OMP) -O0 $(MODULE_DIRS) -mP2OPT_vec_xform_level=103 $*.f90

############################################################
#ARCH    Intel Core 2 Duo/Quad (Intel 64) x86_64 Linux, ifort+icc 9.x,10.x Sequential (no nesting)
#
# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
#
#        By default, some files are compiled without optimizations to speed up compilation. Removing
#        respective makefile rules in the end of this file will result in longer compilation time, and, possibly
#        Out Of Memory messages, but might produce binaries which are substantially faster.
#
#        If you got Out Of Memory message, there are several options:
#        	1. Check your memory limits (ulimit -a), possibly increasing swap partitions size.
#        	2. Remove any debugging flags (-g, -check, -traceback).
#        	3. Force the problematic file to be compiled with less optimizations (see examples at the end of this file), try
#        	   -no-ip compiler flag.
#
#        This configuration is aimed at accuracy. To improve performance (at the expence of accuracy) you might
#        consider removing '-fp-model precise' flag from FCBASEOPTS. This enables non value-safe optimizations.
#        Another option is to add '-ftz' flag, which flushes denormal results to zero when the application is in
#        the gradual underflow mode. It may improve performance if the denormal values are not critical to the
#        behavior of your workload.

#        If you have Intel MPI installed and wish to use instead, make the
#        following changes to settings below:
#        FC                = $(MPI_HOME)/bin64/mpiifort -nocompchk
#        CC                = $(MPI_HOME)/bin64/mpiicc -nocompchk

DMPARALLEL        =
OMP               =
OMPCPP            =
INCLUDE           = $(WRF_SRC_ROOT_DIR)/external/io_netcdf/
MAX_PROC          = 1024
MPI_HOME          =
FC                = ifort
LD                = $(FC)
CC                = icc
SCC               = icc
CC_TOOLS          = $(SCC)
SFC               = ifort
CFLAGS            = -w -O3 -ip  -c
FCOPTIM           = -O3 -xT
FCDEBUG           = # -g -traceback
FCBASEOPTS        = -align all -FR -convert big_endian \
                    -fno-alias -fno-fnalias  \
                    -I$(INCLUDE) -I. -fp-model precise $(FCDEBUG)
FCFLAGS           = $(FCOPTIM) $(FCBASEOPTS) $(OMP)
ARCHFLAGS         = $(COREDEFS) -DGRIB1 CONFIGURE_GRIB2_FLAG -DINTIO   \
                    -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=4 -DLWORDSIZE=4 -DNETCDF \
                    $(DA_ARCHFLAGS) \
                    -DLIMIT_ARGS
# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
ESMF_LIB_FLAGS    =
ESMF_IO_LIB       = ESMFIOLIB
ESMF_IO_LIB_EXT   = ESMFIOEXTLIB
INCLUDE_MODULES   = -I$(WRF_SRC_ROOT_DIR)/main -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf -I$(WRF_SRC_ROOT_DIR)/external/io_int -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 \
                    -I$(WRF_SRC_ROOT_DIR)/external -I$(WRF_SRC_ROOT_DIR)/frame -I$(WRF_SRC_ROOT_DIR)/share -I$(WRF_SRC_ROOT_DIR)/phys -I$(WRF_SRC_ROOT_DIR)/inc
PERL              = perl
REGISTRY          = Registry
LIB               = -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf $(OMP) \
                    CONFIGURE_NETCDF_LIB_PATH \
                     \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
                    CONFIGURE_GRIB2_LIB \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
                    -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
                    $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o \
                        -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
                     -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 -lesmf_time
LDFLAGS           = -O3 -ip $(OMP) CONFIGURE_LDFLAGS
CPP               = /lib/cpp -C -P -traditional
POUND_DEF         = -DNO_RRTM_PHYSICS  -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
CPPFLAGS          = -I$(LIBINCLUDE) -C -P -traditional $(COREDEFS) $(ARCHFLAGS) $(OMPCPP) \
                    -I$(INCLUDE)  -C -P  \
                    $(POUND_DEF) $(COREDEFS)
AR                = ar ru
M4                = m4
RANLIB            = ranlib
NETCDFPATH	      = CONFIGURE_NETCDF_PATH

externals : wrf_ioapi_includes CONFIGURE_WRFIO_NF  wrfio_int module_dm.F wrfio_grib_share wrfio_grib1 CONFIGURE_WRFIO_GRIB2 esmf_time fftpack

module_dm.F :
	( /bin/cp module_dm_warning module_dm.F ; \
          cat module_dm_stubs.F >> module_dm.F )

wrfio_nf :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
          make NETCDFPATH=CONFIGURE_NETCDF_PATH CPP="$(CPP)" FC="$(FC) -I$(WRF_SRC_ROOT_DIR) $(FCFLAGS)" \
          TRADFLAG="-traditional" RANLIB="$(RANLIB)" ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h $(WRF_SRC_ROOT_DIR)/inc ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../ioapi_share/wrf_status_codes.h ../io_phdf5 ; \
	/bin/cp ../ioapi_share/wrf_io_flags.h ../io_quilt )

wrfio_int :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  SFC="$(SFC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" \
		  ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" all )

wrfio_grib_share :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
          make CC="$(CC)" CFLAGS="$(CFLAGS)" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" CPP="$(CPP)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive)

wrfio_grib1 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
          make CC="$(CC)" CPP="$(CPP)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

wrfio_grib2 :
	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
          make CC="$(CC) CONFIGURE_GRIB2_INC" CPP="$(CPP) CONFIGURE_GRIB2_INC" RM="$(RM)" TRADFLAG="-traditional" RANLIB="$(RANLIB)" \
		  FREE="-FR" FIXED="-FI" \
          FC="$(FC) -I$(MPI_HOME)/include $(FCDEBUG) $(FCFLAGS)" archive )

esmf_time :
	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
	  make FC="$(FC) $(FCDEBUG) $(FCFLAGS)" CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(POUND_DEF)" )

fftpack :
	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" )

# Compile these without high optimization and no interprocedural
# optimizations to speed compile. Commenting them out may result
# in longer compilation time, but might produce substantialy faster
# binaries.
mediation_integrate.o : mediation_integrate.F
mediation_interp_domain.o : mediation_interp_domain.F
mediation_feedback_domain.o : mediation_feedback_domain.F
wrf_auxinput1out.o : wrf_auxinput1out.F
wrf_histout.o : wrf_histout.F
wrf_restartout.o : wrf_restartout.F
wrf_inputin.o : wrf_inputin.F
wrf_auxinput1in.o : wrf_auxinput1in.F
wrf_histin.o : wrf_histin.F
wrf_restartin.o : wrf_restartin.F
module_initialize_real.o: module_initialize_real.F
solve_interface.o : solve_interface.F
shift_domain_em.o : shift_domain_em.F
module_io_wrf.o : module_io_wrf.F
module_dm.o : module_dm.F
module_domain.o : module_domain.F
start_domain.o : start_domain.F
mediation_force_domain.o : mediation_force_domain.F
module_configure.o : module_configure.F

mediation_integrate.o mediation_interp_domain.o mediation_feedback_domain.o \
module_configure.o                                              \
wrf_auxinput1out.o wrf_histout.o wrf_restartout.o wrf_inputin.o \
wrf_auxinput1in.o wrf_histin.o wrf_restartin.o module_initialize_real.o \
module_domain.o module_dm.o module_io_wrf.o start_domain.o solve_interface.o \
shift_domain_em.o                                              \
mediation_force_domain.o:
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c -no-ip $(FCBASEOPTS) $(FCDEBUG) $(MODULE_DIRS) $*.f90

# Force even lower optimization level for these files to decrease
# compilation time and lower memory demands
module_dm.o : module_dm.F
solve_em.o : solve_em.F

solve_em.o \
module_dm.o :
	$(RM) $@
	$(SED_FTN) $*.F > $*.b
	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b > $*.f90
	$(RM) $*.b
	$(FC) -c $(FCBASEOPTS) $(FCDEBUG) -O0 $(MODULE_DIRS) $*.f90

##################################################################
#ARCH  NULL