#!/bin/csh -f setenv START_OF_COMPILE "`date`" cont1: if ( ! -e configure.wrf ) then echo "" echo "You must run the 'configure' script before running the 'compile' script!" echo "Exiting..." echo "" exit 1 endif #---------------------------------- if ( ! $?WRF_KPP ) setenv WRF_KPP 0 if ( $WRF_KPP == 1 ) then chem/KPP/compile_wkc endif #--------------------------------- set ZAP = .foofoo set arglist="" set prev_was_j = false set count = 0 foreach a ( $argv ) @ count ++ if ( "$a" == "-h" ) then goto hlp else if ( "$a" == "all_wrfvar" || "$a" == "gen_be" ) then set arglist = ( $arglist $a ) grep "DA_CORE=1" configure.wrf > /dev/null if ( ! $status ) then # If configuration file has DA_CORE=1, set WRF_DA_CORE to 1 setenv WRF_DA_CORE 1 else # If the user ran the configure script without the "wrfda" option, "./compile all_wrfvar" # will fail in non-obvious ways, and some executables will be created incorrectly. # Let's just quit right away to avoid the hassle. echo "" echo "To build WRFDA, you must run the 'configure' script with the 'wrfda' option:" echo " ./configure wrfda" echo "" echo "Exiting..." echo "" exit 1 endif else if ( ( "$a" == "nmm_real" ) || ( "$a" == "nmm_nest" ) || ( "$a" == "nmm_hwrf" ) ) then set arglist = ( $arglist $a ) set ZAP = ( main/wrf.exe main/real_nmm.exe ) if ( "$a" == "nmm_real" ) then grep "NMM_CORE=1" configure.wrf > /dev/null if ( ! $status ) then # If configuration file has NMM_CORE=1 hardwired, ok to set WRF_NMM_CORE to 1 if ( ! $?WRF_NMM_CORE ) setenv WRF_NMM_CORE 1 endif endif else if ( `echo $a | cut -c 1-4` == "nmm_" ) then set arglist = ( $arglist $a ) set ZAP = ( main/wrf.exe main/ideal_nmm.exe ) else if ( "$a" == "em_real" ) then set arglist = ( $arglist $a ) set ZAP = ( main/wrf.exe main/real.exe main/ndown.exe main/tc.exe ) else if ( `echo $a | cut -c 1-3` == "em_" ) then set arglist = ( $arglist $a ) set ZAP = ( main/wrf.exe main/ideal.exe ) else if ( "$a" == "io" ) then set arglist = ( $arglist $a ) else if ( "$a" == "wrfplus" ) then set arglist = ( $arglist $a ) set ZAP = ( main/wrfplus.exe ) setenv WRF_EM_CORE 1 setenv WRF_PLUS_CORE 1 else if ( "$a" == "wrf" ) then set arglist = ( $arglist $a ) set ZAP = ( main/wrf.exe ) else if ( "$a" == "-j" ) then @ JJ = $count + 1 setenv J "-j $argv[$JJ]" set prev_was_j = true else if ( "$prev_was_j" == "true" ) then set prev_was_j = false else if ( "$a" == "emi_conv" ) then set arglist = ( $arglist $a ) set ZAP = ( chem/convert_emiss.exe ) else echo "This option is not recognized: $a" exit ( 1 ) endif end if ( $?WRF_NMM_CORE ) then if ( $WRF_NMM_CORE == 1 ) then setenv WRF_NMM_NEST 1 endif endif if ( "$arglist" == "" ) then goto hlp else unsetenv A2DCASE setenv A2DCASE `echo $arglist | grep 2d` unsetenv A1DCASE setenv A1DCASE `echo $arglist | grep scm` if ( ! ( $?WRF_EM_CORE || $?WRF_NMM_CORE \ || $?WRF_COAMPS_CORE || $?WRF_EXP_CORE \ || $?WRF_PLUS_CORE )) then echo 'None of WRF_EM_CORE, WRF_NMM_CORE, ' # echo ' WRF_COAMPS_CORE, or WRF_EXP_CORE ' echo ' specified in shell environment.... ' setenv WRF_EM_CORE 1 setenv WRF_NMM_CORE 0 setenv WRF_COAMPS_CORE 0 setenv WRF_EXP_CORE 0 setenv WRF_PLUS_CORE 0 endif # these settings get passed down through the environment in the # calls to Make if ( ! $?WRF_HYDRO ) then setenv WRF_HYDRO 0 setenv LIB_WRF_HYDRO "" else if($WRF_HYDRO == 1) then setenv LIB_WRF_HYDRO "-L../hydro/lib -lHYDRO" else setenv LIB_WRF_HYDRO "" endif endif if ( ! $?WRF_DA_CORE ) setenv WRF_DA_CORE 0 if ( ! $?WRF_EM_CORE ) setenv WRF_EM_CORE 0 if ( ! $?WRF_NMM_CORE ) setenv WRF_NMM_CORE 0 if ( ! $?WRF_NMM_NEST ) setenv WRF_NMM_NEST 0 if ( ! $?WRF_COAMPS_CORE ) setenv WRF_COAMPS_CORE 0 if ( ! $?WRF_EXP_CORE ) setenv WRF_EXP_CORE 0 if ( ! $?WRF_PLUS_CORE ) setenv WRF_PLUS_CORE 0 if ( ! $?WRF_CHEM ) setenv WRF_CHEM 0 if ( ! $?WRF_DFI_RADAR ) setenv WRF_DFI_RADAR 0 if ( ! $?HWRF ) setenv HWRF 0 if ( ! $?WRF_CONVERT ) then if ( "$arglist" == "convert_em" ) then setenv WRF_CONVERT 1 setenv WRF_EM_CORE 0 else setenv WRF_CONVERT 0 endif endif if ( ! $?DA_ARCHFLAGS ) setenv DA_ARCHFLAGS "" if ( ( $WRF_CHEM == 1 ) && ( $WRF_DA_CORE == 1 ) ) then echo " " echo "WRFDA can not be compiled with WRF_CHEM=1" echo "unset the WRF_CHEM env variable." echo " " exit endif if ( ( $WRF_DA_CORE == 1 ) && ( ! -d var ) ) then echo " " echo "You need to download and untar the Var code, or" echo "unset the WRF_DA_CORE env variable." echo " " exit endif if ( ( $WRF_CHEM == 1 ) && ( ! -d chem ) ) then echo " " echo "You need to download and untar the chem code, or" echo "unset the WRF_CHEM env variable." echo " " exit endif set overwrite=0 if ($WRF_NMM_CORE == 1 && $WRF_DFI_RADAR == 1 ) then echo "radar dfi not yet supported in NMM core, set WRF_DFI_RADAR to 0 " endif if ($WRF_NMM_CORE == 1 && $WRF_CHEM == 1 ) then echo "Chemistry not yet supported in NMM core, set WRF_CHEM to 0 " if ( ! -f Registry/Registry ) then echo Registry file does not exist set overwrite=1 else head -2 Registry/Registry | tail -1 | grep NMM_CHEM > /dev/null if ( $status ) then set overwrite=1 else set nmm_time=`ls -1tr Registry | cat -n | grep -w 'Registry\.NMM_CHEM' | grep -v 'Registry.NMM_CHEM.' | awk '{print $1}'` set rg_time=`ls -1tr Registry | cat -n | grep -w 'Registry' | grep -v 'Registry.' | awk '{print $1}'` if ( $nmm_time > $rg_time ) set overwrite=1 endif endif if ( $overwrite ) then echo copying Registry/Registry.NMM_CHEM to Registry/Registry echo '## WARNING: this file is autogenerated from Registry/Registry.NMM_CHEM. Changes may be lost' > Registry/Registry /bin/cat Registry/Registry.NMM_CHEM >> Registry/Registry endif # exit 2 endif if ($WRF_EM_CORE == 1 && $WRF_NMM_CORE == 1 ) then echo "Cannot compile both EM and NMM cores in same executable yet." exit 2 endif if ($WRF_EM_CORE == 0 && $WRF_NMM_CORE == 0 && ! $WRF_CONVERT == 1 ) then echo "Cannot compile because both EM and NMM cores are set to 0." exit 2 endif if ("$arglist" == 'nmm_real' && $WRF_NMM_CORE == 0) then echo WRF_NMM_CORE must be set to 1 in order to compile nmm_real exit 2 endif if (($WRF_EM_CORE == 1)&&($WRF_DA_CORE == 0 ) &&($WRF_CHEM == 0 )&&($WRF_CONVERT == 0)&&($WRF_PLUS_CORE == 0) ) then if ( ! -f Registry/Registry ) then set overwrite=1 else head -2 Registry/Registry | tail -1 | grep EM > /dev/null if ( $status ) then set overwrite=1 else set em_time=`ls -1tr Registry | cat -n | grep -w 'Registry\.EM' | grep -v 'Registry.EM.' | awk '{print $1}'` set rg_time=`ls -1tr Registry | cat -n | grep -w 'Registry' | grep -v 'Registry.' | awk '{print $1}'` if ( $em_time > $rg_time ) set overwrite=1 endif endif if ( $overwrite ) then echo copying Registry/Registry.EM to Registry/Registry echo '## WARNING: this file is autogenerated from Registry/Registry.EM. Changes may be lost' > Registry/Registry /bin/cat Registry/Registry.EM >> Registry/Registry endif else if ( ($WRF_EM_CORE == 1)&&($WRF_PLUS_CORE == 1) ) then if ( ! -f Registry/Registry ) then set overwrite=1 else head -2 Registry/Registry | tail -1 | grep WRFPLUS > /dev/null if ( $status ) then set overwrite=1 else set em_time=`ls -1tr Registry | cat -n | grep -w 'Registry\.tladj' | grep -v 'Registry.tladj.' | awk '{print $1}'` set rg_time=`ls -1tr Registry | cat -n | grep -w 'Registry' | grep -v 'Registry.' | awk '{print $1}'` if ( $em_time > $rg_time ) set overwrite=1 endif endif if ( $overwrite ) then echo copying Registry/Registry.tladj to Registry/Registry echo '## WARNING: this file is autogenerated from Registry/Registry.tladj. Changes may be lost' > Registry/Registry /bin/cat Registry/Registry.tladj >> Registry/Registry endif else if (($WRF_EM_CORE == 1)&&($WRF_CHEM == 1 )) then if ( ! -f Registry/Registry ) then set overwrite=1 else head -2 Registry/Registry | tail -1 | grep EM_CHEM > /dev/null if ( $status ) then set overwrite=1 else set em_time=`ls -1tr Registry | cat -n | grep -w 'Registry\.EM_CHEM' | grep -v 'Registry.EM_CHEM.' | awk '{print $1}'` set rg_time=`ls -1tr Registry | cat -n | grep -w 'Registry' | grep -v 'Registry.' | awk '{print $1}'` if ( $em_time > $rg_time ) set overwrite=1 endif endif if ( $overwrite ) then echo copying Registry/Registry.EM_CHEM to Registry/Registry echo '## WARNING: this file is autogenerated from Registry/Registry.EM_CHEM. Changes may be lost' > Registry/Registry /bin/cat Registry/Registry.EM_CHEM >> Registry/Registry endif else if (($WRF_EM_CORE == 1)&&($WRF_DFI_RADAR == 1 )) then if ( ! -f Registry/Registry ) then set overwrite=1 endif if ( $overwrite ) then echo copying Registry/Registry.EM to Registry/Registry echo '## WARNING: this file is autogenerated from Registry/Registry.EM. Changes may be lost' > Registry/Registry /bin/cat Registry/Registry.EM >> Registry/Registry endif else if (($WRF_EM_CORE == 0)&&($WRF_CONVERT == 1 )) then if ( ! -f Registry/Registry ) then set overwrite=1 else head -2 Registry/Registry | tail -1 | grep EM_CONVERT > /dev/null if ( $status ) then set overwrite=1 else set em_time=`ls -1tr Registry | cat -n | grep -w 'Registry\.EM_CONVERT' | grep -v 'Registry.EM_CONVERT.' | awk '{print $1}'` set rg_time=`ls -1tr Registry | cat -n | grep -w 'Registry' | grep -v 'Registry.' | awk '{print $1}'` if ( $em_time > $rg_time ) set overwrite=1 endif endif if ( $overwrite ) then echo copying Registry/Registry.CONVERT to Registry/Registry echo '## WARNING: this file is autogenerated from Registry/Registry.CONVERT. Changes may be lost' > Registry/Registry /bin/cat Registry/Registry.CONVERT >> Registry/Registry endif else if ( $WRF_DA_CORE == 1 ) then if ( ! -f Registry/Registry ) then set overwrite=1 else head -2 Registry/Registry | tail -1 | grep WRFVAR > /dev/null if ( $status ) then set overwrite=1 else set nmm_time=`ls -1tr Registry | cat -n | grep -w 'Registry\.NMM' | grep -v 'Registry.NMM.' | awk '{print $1}'` set rg_time=`ls -1tr Registry | cat -n | grep -w 'Registry' | grep -v 'Registry.' | awk '{print $1}'` if ( $nmm_time > $rg_time ) set overwrite=1 endif endif if ( $overwrite ) then echo copying Registry/Registry.wrfvar to Registry/Registry /bin/rm -f Registry/Registry.rconfig /bin/cat Registry/Registry.EM_COMMON | grep '^rconfig' > Registry/Registry.rconfig echo '## WARNING: this file is autogenerated from Registry/Registry.wrfvar Registry/Registry.EM_COMMON.var. Changes may be lost' > Registry/Registry /bin/cat Registry/Registry.wrfvar >> Registry/Registry endif set wrfpluspath = ( `grep "^WRFPLUSPATH" configure.wrf | cut -d"=" -f2-` ) if ( $wrfpluspath == "" ) then setenv WRFPLUS_INC " " else setenv WRFPLUS_DIR $wrfpluspath setenv WRFPLUS_INC "-I${wrfpluspath}/dyn_em -I${wrfpluspath}/main -I${wrfpluspath}/frame -I${wrfpluspath}/share -I${wrfpluspath}/wrftladj" endif setenv BUFR 1 set CRTM = ( `grep "\-DCRTM" configure.wrf | sed -e 's/\\//g' | sed 's/-//g' ` ) if ( $CRTM != "" ) then echo " " echo "Will compile with CRTM library" echo " " if ( ! $?BUFR ) then echo " " echo "BUFR library is needed for radiance data ingest." echo "setting BUFR=1" echo " " setenv BUFR 1 endif setenv CRTM_CPP "-DCRTM" setenv CRTM_LIB "-L../external/crtm_2.3.0/libsrc -lCRTM" setenv CRTM_SRC "-I../external/crtm_2.3.0/libsrc" #setenv SFC_CRTM `grep '^SFC' configure.wrf | awk '{print $3}' | sed -e 's/\// /g' | awk '{print $NF}'` #setenv ABI_CRTM `grep '^SFC' configure.wrf | sed -n 's/.*\(\-m[0-9]\{2\}\).*/\1/p'` setenv CRTM 1 else echo " " echo "Compiling WRFDA without CRTM library" echo " " setenv CRTM_CPP " " setenv CRTM_LIB " " setenv CRTM_SRC " " setenv CRTM 0 endif set hdf5path = ( `grep "^HDF5PATH" configure.wrf | cut -d"=" -f2-` ) if ( $hdf5path == "" ) then setenv HDF5_INC "" unsetenv HDF5 else echo " " echo "Compiling with HDF5 libraries in:" echo $hdf5path echo " " setenv HDF5_INC "-I${hdf5path}/include" setenv HDF5 1 endif set RTTOV = ( `grep "^RTTOVPATH" configure.wrf | cut -d"=" -f2-` ) if ( $RTTOV == "" ) then setenv RTTOV_LIB " " setenv RTTOV_SRC " " unsetenv RTTOV else if ( $hdf5path == "" ) then echo "As of version 12.1 of RTTOV, WRFDA requires HDF5 in order utilize the RTTOV library." echo "RTTOV emissivity atlas files are now provided only in HDF5 format." echo "Please supply an HDF5 path prior to configure or unset RTTOV." exit 1 else echo " " echo "Compiling with RTTOV libraries in:" echo $RTTOV echo " " if ( ! $?BUFR ) then echo " " echo "BUFR library is needed for radiance data ingest." echo "setting BUFR=1" echo " " setenv BUFR 1 endif if ( -e ${RTTOV}/lib/librttov12_main.a ) then setenv RTTOV_LIB "-L${hdf5path}/lib -lhdf5hl_fortran -lhdf5_hl -lhdf5_fortran -lhdf5 -L${RTTOV}/lib -lrttov12_coef_io -lrttov12_emis_atlas -lrttov12_main -lrttov12_hdf" else echo "Can not find a compatible RTTOV library! Please ensure that your RTTOV build was successful," echo "your 'RTTOV' environment variable is set correctly, and you are using a supported version of RTTOV." echo "Current supported version(s): 12.1" exit 1 endif setenv RTTOV_SRC "-I${RTTOV}/include -I${RTTOV}/mod" endif endif if ( $?CLOUD_CV ) then setenv CLOUD_CV_CPP "-DCLOUD_CV" else setenv CLOUD_CV_CPP " " endif if ( $?BUFR ) then setenv BUFR_CPP "-DBUFR" setenv BUFR_LIB "-L../external/bufr -lbufr" else setenv BUFR_CPP " " setenv BUFR_LIB " " endif if ( $?WAVELET ) then setenv WAVELET_LIB "../external/wavelet/libWavelet.a ../external/wavelet/lib_wavelet.a" else setenv WAVELET_LIB " " endif if ( $?MADIS ) then setenv MADIS_CPP "-DMADIS" setenv MADIS_STATIC ${MADIS}/static setenv MADIS_LIB "-L${MADIS} -lmadis" else setenv MADIS_CPP " " setenv MADIS_LIB " " endif setenv DA_ARCHFLAGS "${BUFR_CPP} ${MADIS_CPP} -DFFTPACK -DNORESHAPE" endif if (($WRF_NMM_CORE == 1)&&($WRF_CHEM == 0 )) then if ( ! -f Registry/Registry ) then set overwrite=1 else head -2 Registry/Registry | tail -1 | grep NMM > /dev/null if ( $status ) then set overwrite=1 else set nmm_time=`ls -1tr Registry | cat -n | grep -w 'Registry\.NMM' | grep -v 'Registry.NMM.' | awk '{print $1}'` set rg_time=`ls -1tr Registry | cat -n | grep -w 'Registry' | grep -v 'Registry.' | awk '{print $1}'` if ( $nmm_time > $rg_time ) set overwrite=1 endif endif if ( $overwrite ) then echo copying Registry/Registry.NMM to Registry/Registry echo '## WARNING: this file is autogenerated from Registry/Registry.NMM. Changes may be lost' > Registry/Registry /bin/cat Registry/Registry.NMM >> Registry/Registry endif # integrity check for a kludge where a hard coded value in the # registry must match the same value in arch/preamble set registryvalue=`grep 'dimspec.* q ' Registry/registry.dimspec | sed -e 's/..*constant=//' -e 's/ ..*$//'` set preamblevalue=`grep 'DNMM_MAX_DIM=.*' arch/preamble | sed -e 's/..*-DNMM_MAX_DIM=//' -e 's/ ..*$//'` if ( $registryvalue != $preamblevalue ) then echo "Harded coded value of dimspec q in Registry ($registryvalue) does not" echo "equal the hard coded value of NMM_MAX_DIM in arch/preamble ($preamblevalue)" echo "Please fix and try again." exit 2 endif endif echo " " echo "============================================================================================== " echo " " cat inc/version_decl | cut -d"'" -f2 echo " " echo -n "Compiling: " if ( $WRF_DA_CORE ) echo -n "WRF_DA_CORE " if ( $WRF_EM_CORE ) echo -n "WRF_EM_CORE " if ( $WRF_NMM_CORE ) echo -n "WRF_NMM_CORE " if ( $WRF_COAMPS_CORE ) echo -n "WRF_COAMPS_CORE " if ( $WRF_EXP_CORE ) echo -n "WRF_EXP_CORE " echo " " env | grep LARGE echo " " uname -a echo " " set comp = ( `grep "^SFC" configure.wrf | cut -d"=" -f2-` ) if ( "$comp[1]" == "gfortran" ) then gfortran --version else if ( "$comp[1]" == "pgf90" ) then pgf90 --version else if ( "$comp[1]" == "ifort" ) then ifort -V else echo "Not sure how to figure out the version of this compiler: $comp[1]" endif echo " " echo "============================================================================================== " echo " " if ( ! $?WRF_SRC_ROOT_DIR ) setenv WRF_SRC_ROOT_DIR `pwd` # new dec 2009. check to see if make supports parallel -j option make -j 2 >& /dev/null if ( $status == 0 ) then # Parallel make ok if ( ! $?J ) then # J not defined echo setting parallel make -j 2 # Set default to 2 setenv J "-j 2" else # J is defined, check that it is a correctly formed variable set first2chars = `echo $J | cut -c 1-2` # Are 1st two chars are -j? set second_word = `echo $J | cut -d" " -f2` # Is second word a number? if ( "$first2chars" == "-j" ) then if ( ( "$second_word" >= "2" ) && \ ( "$second_word" <= "20" ) ) then echo setting parallel make $J else if ( "$second_word" == "1" ) then echo setting serial make $J else echo "badly formed -j option for parallel make: $J" echo "or you set the number of processors above 20 " echo setting parallel make -j 2 # Set default to 2 setenv J "-j 2" endif else if ( "$J" == "" ) then # J blank is OK echo setting serial make $J else echo "parallel option for make is -j, you entered: $first2chars" echo setting parallel make -j 2 # Set default to 2 setenv J "-j 2" endif endif endif else echo not setting parallel make endif /bin/rm -f $ZAP >& /dev/null make $arglist A2DCASE="$A2DCASE" WRF_SRC_ROOT_DIR="$WRF_SRC_ROOT_DIR" endif exit 0 hlp: echo ' ' echo 'Usage:' echo ' ' echo ' compile [-j n] wrf compile wrf in run dir (NOTE: no real.exe, ndown.exe, or ideal.exe generated)' echo ' ' echo ' or choose a test case (see README_test_cases for details) :' foreach d ( `/bin/ls test` ) if ( "$d" != "CVS" ) then echo " compile [-j n] $d" endif end echo ' ' echo ' compile -j n parallel make using n tasks if supported (default 2)' echo ' compile -h help message'