add support for using netCDF and netCDF-Fortran installations in separate paths
author: Kenneth Hoste (HPC-UGent)
diff -ru WRFV3.orig/arch/Config_new.pl WRFV3/arch/Config_new.pl
--- WRFV3.orig/arch/Config_new.pl	2015-12-11 19:38:11.000000000 +0100
+++ WRFV3/arch/Config_new.pl	2016-04-27 12:07:59.419553000 +0200
@@ -8,6 +8,7 @@
 select((select(STDOUT), $|=1)[0]);
 $sw_perl_path = perl ;
 $sw_netcdf_path = "" ;
+$sw_netcdff_path = "" ; # for netCDF 4.2 and greater, Fortran lib may be in a different path
 $sw_pnetcdf_path = "" ;
 $sw_hdf5_path=""; 
 $sw_phdf5_path=""; 
@@ -87,6 +88,10 @@
           }
       }
   }
+  if ( substr( $ARGV[0], 1, 8 ) eq "netcdff=" )
+  {
+    $sw_netcdff_path = substr( $ARGV[0], 9 ) ;
+  }
   if ( substr( $ARGV[0], 1, 8 ) eq "pnetcdf=" )
   {
     $sw_pnetcdf_path = substr( $ARGV[0], 9 ) ;
@@ -114,6 +119,7 @@
   if ( substr( $ARGV[0], 1, 11 ) eq "USENETCDFF=" )
   {
     $sw_usenetcdff = substr( $ARGV[0], 12 ) ;
+    $sw_usenetcdff =~ s/!/ /g ;
   }
   if ( substr( $ARGV[0], 1, 10 ) eq "USENETCDF=" )
   {
@@ -417,6 +423,7 @@
   {
     $_ =~ s/CONFIGURE_PERL_PATH/$sw_perl_path/g ;
     $_ =~ s/CONFIGURE_NETCDF_PATH/$sw_netcdf_path/g ;
+    $_ =~ s/CONFIGURE_NETCDFF_PATH/$sw_netcdff_path/g ;
     $_ =~ s/CONFIGURE_PNETCDF_PATH/$sw_pnetcdf_path/g ;
     $_ =~ s/CONFIGURE_HDF5_PATH/$sw_hdf5_path/g ;
     $_ =~ s/CONFIGURE_PHDF5_PATH/$sw_phdf5_path/g ;
Only in WRFV3/arch: Config_new.pl.orig
diff -ru WRFV3.orig/arch/configure_new.defaults WRFV3/arch/configure_new.defaults
--- WRFV3.orig/arch/configure_new.defaults	2016-02-29 07:22:29.000000000 +0100
+++ WRFV3/arch/configure_new.defaults	2016-04-27 12:07:59.429182000 +0200
@@ -1626,6 +1626,7 @@
 
 LIB_EXTERNAL    = \
                      ../external/io_netcdf/libwrfio_nf.a CONFIGURE_NETCDF_PATH/lib/libnetcdf.lib \
+                     CONFIGURE_NETCDFF_PATH/lib/libnetcdff.lib \
                      ../external/wavelet/libWavelet.a ../external/wavelet/lib_wavelet.a
 ESMF_IO_LIB     =    ../external/esmf_time_f90/libesmf_time.a
 LIB_BUNDLED     = \
Only in WRFV3/arch: configure_new.defaults.orig
diff -ru WRFV3.orig/arch/conf_tokens WRFV3/arch/conf_tokens
--- WRFV3.orig/arch/conf_tokens	2008-02-26 16:39:38.000000000 +0100
+++ WRFV3/arch/conf_tokens	2016-04-27 12:07:59.435906000 +0200
@@ -5,6 +5,7 @@
        CONFIGURE_DMPARALLEL
 CONFIGURE_RWORDSIZE
 CONFIGURE_NETCDF_FLAG
+CONFIGURE_NETCDF_FLAG
 CONFIGURE_GRIB2_FLAG
 CONFIGURE_NETCDF_LIB_PATH
 CONFIGURE_GRIB2_LIB
@@ -13,4 +14,5 @@
 CONFIGURE_WRFIO_NF 
 CONFIGURE_WRFIO_GRIB2 
 CONFIGURE_NETCDF_PATH
+CONFIGURE_NETCDFF_PATH
 CONFIGURE_GRIB2_INC
diff -ru WRFV3.orig/arch/postamble_new WRFV3/arch/postamble_new
--- WRFV3.orig/arch/postamble_new	2016-02-05 22:22:09.000000000 +0100
+++ WRFV3/arch/postamble_new	2016-04-27 12:08:58.368686000 +0200
@@ -45,6 +45,7 @@
                       -I$(WRF_SRC_ROOT_DIR)/phys \
                       -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc \
                       -I$(NETCDFPATH)/include \
+                      -I$(NETCDFFPATH)/include \
                       CONFIGURE_RTTOV_INC
 REGISTRY        =    Registry
 CC_TOOLS_CFLAGS = CONFIGURE_NMM_CORE
@@ -67,6 +68,7 @@
 ENVCOMPDEFS     =    CONFIGURE_COMPILEFLAGS
 CPPFLAGS        =    $(ARCHFLAGS) $(ENVCOMPDEFS) -I$(LIBINCLUDE) $(TRADFLAG) CONFIGURE_COMMS_INCLUDE
 NETCDFPATH      =    CONFIGURE_NETCDF_PATH
++NETCDFFPATH     =    CONFIGURE_NETCDFF_PATH
 HDF5PATH        =    CONFIGURE_HDF5_PATH
 WRFPLUSPATH     =    CONFIGURE_WRFPLUS_PATH
 PNETCDFPATH     =    CONFIGURE_PNETCDF_PATH
@@ -97,7 +99,7 @@
 
 wrfio_nf : 
 	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
-          make $(J) NETCDFPATH="$(NETCDFPATH)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          make $(J) NETCDFPATH="$(NETCDFPATH)" NETCDFFPATH="$(NETCDFFPATH)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
           CC="$(SCC)" CFLAGS="$(CFLAGS)" \
           FC="$(SFC) $(PROMOTION) $(OMP) $(FCFLAGS)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
 
Only in WRFV3/arch: postamble_new.orig
Only in WRFV3/arch: postamble_new.rej
diff -ru WRFV3.orig/configure WRFV3/configure
--- WRFV3.orig/configure	2015-12-11 19:38:11.000000000 +0100
+++ WRFV3/configure	2016-04-27 12:58:24.475136000 +0200
@@ -287,16 +287,28 @@
 USENETCDFF=""  # see below
 if [ -n "$NETCDF" ] ; then
   echo "Will use NETCDF in dir: $NETCDF"
+  # for netCDF 4.2 and greater, the Fortran library is a separate install
+  if [ -z "$NETCDFF" ]; then
+    NETCDFF="$NETCDFF"
+  fi
 # Oh UNIDATA, why make it so hard ...
   if [ -f "$NETCDF/lib/libnetcdff.a" -o -f "$NETCDF/lib/libnetcdff.so" ] ; then
     USENETCDFF="-lnetcdff"
   else
-    USENETCDFF=" "
+     if [ -f "$NETCDFF/lib/libnetcdff.a" -o -f "$NETCDFF/lib/libnetcdff.so" -o -f "$NETCDFF/lib64/libnetcdff.so" -o -f "$NETCDFF/lib64/libnetcdff.so" ] ; then
+       USENETCDFF="-L$NETCDFF/lib!-L$NETCDFF/lib64!-lnetcdff" # ! will be replaced with space
+     else
+       USENETCDFF=" "
+     fi
   fi
   if [ -f "$NETCDF/lib/libnetcdf.a" -o -f "$NETCDF/lib/libnetcdf.so" ] ; then
     USENETCDF="-lnetcdf"
   else
-    USENETCDF=" "
+    if [ -f "$NETCDF/lib/libnetcdf.a" -o -f "$NETCDF/lib/libnetcdf.so" -o -f "$NETCDF/lib64/libnetcdf.a" -o -f "$NETCDF/lib64/libnetcdf.so" ] ; then
+      USENETCDF="-L$NETCDF/lib!-L$NETCDF/lib64!-lnetcdf" # ! will be replaced with space
+    else
+      USENETCDF=" "
+    fi
   fi
 else
   echo "Will configure for use without NetCDF"
@@ -595,7 +607,7 @@
    srch=`grep -i "^#ARCH.*$os" arch/configure_new.defaults | grep -i "$mach"`
    if [ -n "$srch" ] ; then
      $PERL arch/Config_new.pl -dmparallel=$COMMLIB -ompparallel=$OMP -perl=$PERL \
-          -netcdf=$NETCDF -pnetcdf=$PNETCDF -hdf5=$HDF5 -phdf5=$PHDF5 -os=$os -mach=$mach -ldflags=$ldflags \
+          -netcdf=$NETCDF -netcdff=$NETCDFF -pnetcdf=$PNETCDF -phdf5=$PHDF5 -os=$os -mach=$mach -ldflags=$ldflags \
           -compileflags=$compileflags -opt_level=$opt_level -USENETCDFF=$USENETCDFF -USENETCDF=$USENETCDF \
           -time=$FORTRAN_COMPILER_TIMER \
           -wrf_core=$wrf_core -gpfs=$GPFS_PATH -curl=$CURL_PATH -dep_lib_path="$DEP_LIB_PATH"
@@ -707,10 +719,10 @@
 echo "If you wish to change the default options, edit the file:"
 echo "     arch/configure_new.defaults"
 
-if test -n "$NETCDF" ; then
-  if [ ! -f $NETCDF/include/netcdf.inc ] ; then
+if test -n "$NETCDFF" ; then
+  if [ ! -f $NETCDFF/include/netcdf.inc ] ; then
     echo
-    echo "Error : Not found $NETCDF/include/netcdf.inc"
+    echo "Error : Not found $NETCDFF/include/netcdf.inc"
     echo "        Please check this installation of NetCDF and re-run this configure script"
     echo
     if test -n "$NETCDF4" ; then
@@ -719,7 +731,7 @@
     fi
     exit -1
   fi
-  grep nf_format_64bit $NETCDF/include/netcdf.inc > /dev/null
+  grep nf_format_64bit $NETCDFF/include/netcdf.inc > /dev/null
   configure_aaaa=$? ; export configure_aaaa
   if [ $configure_aaaa -a -z "$WRFIO_NCD_LARGE_FILE_SUPPORT" ] ; then
     echo "NetCDF users note:"
Only in WRFV3: configure.orig
Only in WRFV3: configure.rej
diff -ru WRFV3.orig/external/io_netcdf/makefile WRFV3/external/io_netcdf/makefile
--- WRFV3.orig/external/io_netcdf/makefile	2014-07-13 01:39:10.000000000 +0200
+++ WRFV3/external/io_netcdf/makefile	2016-04-27 12:07:59.490731000 +0200
@@ -3,9 +3,9 @@
 OBJSL   = wrf_io.o field_routines.o module_wrfsi_static.o
 OBJS    = $(OBJSL)
 CODE    = ext_ncd_get_dom_ti.code ext_ncd_get_var_td.code ext_ncd_get_var_ti.code ext_ncd_put_dom_ti.code ext_ncd_put_var_td.code ext_ncd_put_var_ti.code transpose.code 
-FFLAGS  =  $(FCFLAGS) -I$(NETCDFPATH)/include -I../ioapi_share
-LIBS    = $(LIB_LOCAL) -L$(NETCDFPATH)/lib -lnetcdf
-LIBFFS  = $(LIB_LOCAL) -L$(NETCDFPATH)/lib -lnetcdff -lnetcdf $(NETCDF4_DEP_LIB)
+FFLAGS  =  $(FCFLAGS) -I$(NETCDFFPATH)/include -I../ioapi_share
+LIBS    = $(LIB_LOCAL) -L$(NETCDFPATH)/lib -L$(NETCDFPATH)/lib64 -lnetcdf
+LIBFFS  = $(LIB_LOCAL) -L$(NETCDFPATH)/lib -L$(NETCDFPATH)/lib64 -L$(NETCDFFPATH)/lib -L$(NETCDFFPATH)/lib64 -lnetcdff -lnetcdf $(NETCDF4_DEP_LIB)
 CPP1    = $(CPP) -P $(TRADFLAG)
 M4      = m4 -Uinclude -Uindex -Ulen
 AR      = ar
@@ -24,7 +24,7 @@
 			$(RANLIB) $@
 
 wrf_io.o:               wrf_io.F90 $(CODE)
-			grep nf_format_64bit $(NETCDFPATH)/include/netcdf.inc ;\
+			grep nf_format_64bit $(NETCDFFPATH)/include/netcdf.inc ;\
                         a=$$? ; export a ; \
 			if [ $$a -a "$$WRFIO_NCD_LARGE_FILE_SUPPORT" = "1" ] ; then \
                           $(CPP1) -DWRFIO_NCD_LARGE_FILE_SUPPORT -I../ioapi_share wrf_io.F90 | $(M4) - > wrf_io.f ; \
@@ -43,14 +43,14 @@
 	x=`echo "$(FC)" | awk '{print $$1}'` ; export x ; \
 	if [ $$x = "gfortran" ] ; then \
            echo removing external declaration of iargc for gfortran ; \
-	   $(CPP1) -I$(NETCDFPATH)/include -I../ioapi_share diffwrf.F90 | sed '/integer *, *external.*iargc/d' > diffwrf.f ;\
+	   $(CPP1) -I$(NETCDFFPATH)/include -I../ioapi_share diffwrf.F90 | sed '/integer *, *external.*iargc/d' > diffwrf.f ;\
         else \
-	   $(CPP1) -I$(NETCDFPATH)/include -I../ioapi_share diffwrf.F90 > diffwrf.f ; \
+	   $(CPP1) -I$(NETCDFFPATH)/include -I../ioapi_share diffwrf.F90 > diffwrf.f ; \
         fi
 	$(FC) -c $(FFLAGS) diffwrf.f
 	@if [ \( -f ../../frame/wrf_debug.o \) -a \( -f ../../frame/module_wrf_error.o \) -a \( -f $(ESMF_MOD_DEPENDENCE) \) -a \( -f ../../frame/clog.o \) ] ; then \
 	  echo "diffwrf io_netcdf is being built now. " ; \
-          if [ \( -f $(NETCDFPATH)/lib/libnetcdff.a -o -f $(NETCDFPATH)/lib/libnetcdff.so \) ] ; then \
+          if [ \( -f $(NETCDFFPATH)/lib/libnetcdff.a -o -f $(NETCDFFPATH)/lib/libnetcdff.so -o -f $(NETCDFFPATH)/lib64/libnetcdff.a -o -f $(NETCDFFPATH)/lib64/libnetcdff.so \) ] ; then \
             $(FC) $(FFLAGS) $(LDFLAGS) -o diffwrf diffwrf.o $(OBJSL) ../../frame/wrf_debug.o ../../frame/module_wrf_error.o ../../frame/clog.o $(ESMF_IO_LIB_EXT) $(LIBFFS) ;\
           else \
             $(FC) $(FFLAGS) $(LDFLAGS) -o diffwrf diffwrf.o $(OBJSL) ../../frame/wrf_debug.o ../../frame/module_wrf_error.o ../../frame/clog.o $(ESMF_IO_LIB_EXT) $(LIBS) ;\
diff -ru WRFV3.orig/Makefile WRFV3/Makefile
--- WRFV3.orig/Makefile	2016-03-11 18:47:37.000000000 +0100
+++ WRFV3/Makefile	2016-04-27 12:09:30.391608000 +0200
@@ -867,7 +867,7 @@
 	@ echo '--------------------------------------'
 	( cd frame ; $(MAKE) $(J) framework; \
           cd ../external/io_netcdf ; \
-          $(MAKE) NETCDFPATH="$(NETCDFPATH)" FC="$(FC) $(FCBASEOPTS)" RANLIB="$(RANLIB)" \
+          $(MAKE) NETCDFPATH="$(NETCDFPATH)" NETCDFFPATH="$(NETCDFFPATH)" FC="$(SFC) $(FCBASEOPTS)" RANLIB="$(RANLIB)" \
                CPP="$(CPP)" LDFLAGS="$(LDFLAGS)" TRADFLAG="$(TRADFLAG)" ESMF_IO_LIB_EXT="$(ESMF_IO_LIB_EXT)" \
 	       LIB_LOCAL="$(LIB_LOCAL)" \
                ESMF_MOD_DEPENDENCE="$(ESMF_MOD_DEPENDENCE)" AR="INTERNAL_BUILD_ERROR_SHOULD_NOT_NEED_AR" diffwrf; \
Only in WRFV3: Makefile.orig
Only in WRFV3: Makefile.rej