diff --git a/arch/arch-linux_gfortran.fcm b/arch/arch-linux_gfortran.fcm
index 39327645b6889dcaebf0d75a86153804daf73ecd..d1995a365b6fae51898b67f2859e3bd092f26650 100644
--- a/arch/arch-linux_gfortran.fcm
+++ b/arch/arch-linux_gfortran.fcm
@@ -49,7 +49,7 @@
 %FFLAGS              %FCFLAGS
 %LD                  mpif90
 %LDFLAGS             
-%FPPFLAGS            -P -C -traditional
+%FPPFLAGS            -P -traditional
 %AR                  ar
 %ARFLAGS             rs
 %MK                  make
diff --git a/arch/arch-linux_ifort.fcm b/arch/arch-linux_ifort.fcm
index cf1d3c2e1765935b6f69ac35d43a212e5f8a2ebf..93bbe8ee86c8826bb1d452f1d57520bc85a752ae 100644
--- a/arch/arch-linux_ifort.fcm
+++ b/arch/arch-linux_ifort.fcm
@@ -48,7 +48,7 @@
 %FFLAGS              %FCFLAGS
 %LD                  ftn
 %LDFLAGS             
-%FPPFLAGS            -P -C -traditional
+%FPPFLAGS            -P -traditional
 %AR                  ar
 %ARFLAGS             rs
 %MK                  gmake
diff --git a/arch/arch-linux_ifort_omp.fcm b/arch/arch-linux_ifort_omp.fcm
index e695f81128fbf221a792fae958a549ce8b4b38d3..d8faadd5813575a73382185ab3c55f7b2d94a23c 100644
--- a/arch/arch-linux_ifort_omp.fcm
+++ b/arch/arch-linux_ifort_omp.fcm
@@ -20,7 +20,7 @@
 %FCFLAGS 	         -r8 -O3  -traceback -openmp
 %FFLAGS 	            -r8 -O3  -traceback -openmp
 %LD                  ifort
-%FPPFLAGS            -P -C -traditional
+%FPPFLAGS            -P -traditional
 %LDFLAGS
 %AR                  ar 
 %ARFLAGS             -r
diff --git a/arch/arch-linux_pgf90.fcm b/arch/arch-linux_pgf90.fcm
index 24d3cdca1395214bd0ec8e8df741f45af6455f3b..b06c01a09770874215bf0dd0e1af9e0b675c2403 100644
--- a/arch/arch-linux_pgf90.fcm
+++ b/arch/arch-linux_pgf90.fcm
@@ -21,7 +21,7 @@
 %FFLAGS              %FCFLAGS
 %LD                  pgf90
 %LDFLAGS
-%FPPFLAGS            -P -C -traditional
+%FPPFLAGS            -P -traditional
 %AR                  ar
 %ARFLAGS             -rs
 %MK                  gmake
diff --git a/arch/misc/arch-X64_BULL.fcm b/arch/misc/arch-X64_BULL.fcm
index 1f5db75d2273c84aaabdd8f3c72eed5dcd70048a..7b94dc4d88c8618e8630b326e784eefe9e225a0e 100644
--- a/arch/misc/arch-X64_BULL.fcm
+++ b/arch/misc/arch-X64_BULL.fcm
@@ -20,7 +20,7 @@
 %FFLAGS              %FCFLAGS
 %LD                  scorep-mpiifort
 %LDFLAGS             -lstdc++
-%FPPFLAGS            -P -C -traditional -std=c99
+%FPPFLAGS            -P -traditional -std=c99
 %AR                  ar
 %ARFLAGS             rs
 %MK                  gmake
diff --git a/ext/DUMMY_NETCDF/netcdf.F90 b/ext/DUMMY_NETCDF/netcdf.F90
new file mode 100644
index 0000000000000000000000000000000000000000..cd8d316fabcb20f5b003135c063cb02ffb721134
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf.F90
@@ -0,0 +1,59 @@
+! Description:
+!  
+! Input Parameters:
+!   None.
+!
+! Output Parameters:
+!   Many public constants are defined in "netcdf_constants.f90". The names follow 
+!     the Fortran 77 names, with nf90_ used as a prefix instead of nf_77. 
+!   Functions are made accessable through PUBLIC:: statements in "netcdf_visibility.f90". 
+!     Only the functions listed in this file are available in the interface. 
+!
+! References and Credits:
+!   Written by
+!    Robert Pincus
+!    Cooperative Institue for Meteorological Satellite Studies
+!    University of Wisconsin - Madison
+!    1225 W. Dayton St. 
+!    Madison, Wisconsin 53706
+!    Robert.Pincus@ssec.wisc.edu
+!
+! Design Notes:
+!   Module elements are private by default. 
+!   Many functions have optional arguments. In order to keep the interface easy to use, 
+!     we've reordered the arguments (relative to the F77 interface) in some functions. 
+!   The external datatype of attributes is the same as the internal type. 
+!   By default, data is read from or put into the lowest part of the netCDF array with stride 1. 
+!   We've made heavy use of overloading, especially in the variable put and get routines. 
+!     A single function exists for putting all variables; a single function exists for getting 
+!     variables. 
+!   Text variables must be treated somewhat differently. When a character variable is defined, the
+!     fastest-varying index (first index in Fortran) must be the maxiumu length of the character 
+!     string. N dimensional arrays of strings passed to the put or get functions are written/read
+!     from dimensions 2:N+1. The number of values along the first dimension is determined by the
+!     length of the argument character string. 
+!
+ module netcdf
+  use typesizes, only: OneByteInt, TwoByteInt, FourByteInt, EightByteInt, &
+                       FourByteReal, EightByteReal
+  implicit none
+  private
+  ! as of version 4.4, the following are merged:
+  ! - netcdf_constants.f90 and netcdf4_constants.f90
+  !
+  ! Update the dependencies in the Makefile.am when modifying the list of
+  !     included files.
+#include "netcdf_constants.h90"
+#include "netcdf_overloads.h90"
+#include "netcdf_visibility.h90"
+contains
+#include "netcdf_file.h90"
+#include "netcdf3_file.h90"
+#include "netcdf_dims.h90"
+#include "netcdf_attributes.h90"
+#include "netcdf_variables.h90"
+#include "netcdf_text_variables.h90"
+#include "netcdf_expanded_subset.h90"
+#include "netcdf_get_nd_expanded.h90"
+#include "netcdf_eightbyte_subset.h90"
+end module netcdf
diff --git a/ext/DUMMY_NETCDF/netcdf3_file.h90 b/ext/DUMMY_NETCDF/netcdf3_file.h90
new file mode 100644
index 0000000000000000000000000000000000000000..c0f437c6798e4157ca78009591889c4813907804
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf3_file.h90
@@ -0,0 +1,27 @@
+! This is part of the netCDF F90 API, or. Copyright 2006 UCAR. See COPYRIGHT file
+! for details.
+
+! This file contains the netcdf-3 file open and create functions.
+
+! $Id: netcdf4_constants.f90,v 1.14 2010/05/25 13:53:00 ed Exp $
+! -------
+function nf90_open(path, mode, ncid, chunksize)
+  character (len = *), intent(in   ) :: path
+  integer,             intent(in   ) :: mode
+  integer,             intent(  out) :: ncid
+  integer, optional,   intent(inout) :: chunksize
+  integer                            :: nf90_open
+
+  nf90_open = -1
+end function nf90_open
+! -------
+function nf90_create(path, cmode, ncid, initialsize, chunksize)
+  character (len = *), intent(in   ) :: path
+  integer,             intent(in   ) :: cmode
+  integer,             intent(  out) :: ncid
+  integer, optional,   intent(in   ) :: initialsize
+  integer, optional,   intent(inout) :: chunksize
+  integer                            :: nf90_create
+  
+  nf90_create = -1
+end function nf90_create
diff --git a/ext/DUMMY_NETCDF/netcdf_attributes.h90 b/ext/DUMMY_NETCDF/netcdf_attributes.h90
new file mode 100644
index 0000000000000000000000000000000000000000..4185cb9d3540412dc1558348c3102c80ddade61f
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf_attributes.h90
@@ -0,0 +1,290 @@
+  !
+  ! Attribute routines:
+  !
+  ! -------
+  function nf90_copy_att(ncid_in, varid_in, name, ncid_out, varid_out)
+    integer,             intent( in) :: ncid_in,  varid_in
+    character (len = *), intent( in) :: name
+    integer,             intent( in) :: ncid_out, varid_out
+    integer                          :: nf90_copy_att
+
+    nf90_copy_att = -1
+  end function nf90_copy_att
+  ! -------
+  function nf90_rename_att(ncid, varid, curname, newname)
+    integer,             intent( in) :: ncid,  varid
+    character (len = *), intent( in) :: curname, newname
+    integer                          :: nf90_rename_att
+
+    nf90_rename_att = -1
+  end function nf90_rename_att
+  ! -------
+  function nf90_del_att(ncid, varid, name)
+    integer,             intent( in) :: ncid, varid
+    character (len = *), intent( in) :: name
+    integer                          :: nf90_del_att
+
+    nf90_del_att = -1
+  end function nf90_del_att
+  ! -------
+  ! Attribute inquiry functions
+  ! -------
+  function nf90_inq_attname(ncid, varid, attnum, name)
+    integer,             intent( in) :: ncid, varid, attnum
+    character (len = *), intent(out) :: name
+    integer                          :: nf90_inq_attname
+
+    nf90_inq_attname = -1
+  end function nf90_inq_attname
+  ! -------
+  function nf90_inquire_attribute(ncid, varid, name, xtype, len, attnum)
+    integer,             intent( in)           :: ncid, varid
+    character (len = *), intent( in)           :: name
+    integer,             intent(out), optional :: xtype, len, attnum
+    integer                                    :: nf90_inquire_attribute
+
+    nf90_inquire_attribute   = -1
+  end function nf90_inquire_attribute
+  ! -------
+  ! Put and get functions; these will get overloaded
+  ! -------
+  ! Text
+  ! -------
+  function nf90_put_att_text(ncid, varid, name, values)
+    integer,                          intent( in) :: ncid, varid
+    character(len = *),               intent( in) :: name
+    character(len = *),               intent( in) :: values
+    integer                                       :: nf90_put_att_text
+
+    nf90_put_att_text = -1
+  end function nf90_put_att_text
+  ! -------
+  function nf90_get_att_text(ncid, varid, name, values)
+    integer,                          intent( in) :: ncid, varid
+    character(len = *),               intent( in) :: name
+    character(len = *),               intent(out) :: values
+    integer                                       :: nf90_get_att_text
+
+    nf90_get_att_text = -1
+  end function nf90_get_att_text
+  ! -------
+  ! Integer attributes
+  ! -------
+  function nf90_put_att_OneByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind =  OneByteInt), dimension(:), intent( in) :: values
+    integer                                                 :: nf90_put_att_OneByteInt
+
+    nf90_put_att_OneByteInt = -1
+  end function nf90_put_att_OneByteInt
+  ! -------
+  function nf90_put_att_one_OneByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind =  OneByteInt),               intent( in) :: values
+    integer                                                 :: nf90_put_att_one_OneByteInt
+
+    nf90_put_att_one_OneByteInt = -1
+  end function nf90_put_att_one_OneByteInt
+  ! -------
+  function nf90_get_att_OneByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind =  OneByteInt), dimension(:), intent(out) :: values
+    integer                                                 :: nf90_get_att_OneByteInt
+
+    nf90_get_att_OneByteInt = -1
+  end function nf90_get_att_OneByteInt
+  ! -------
+  function nf90_get_att_one_OneByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind =  OneByteInt),               intent(out) :: values
+    integer                                                 :: nf90_get_att_one_OneByteInt
+
+    nf90_get_att_one_OneByteInt = -1
+  end function nf90_get_att_one_OneByteInt
+  ! -------
+  function nf90_put_att_TwoByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind =  TwoByteInt), dimension(:), intent( in) :: values
+    integer                                                 :: nf90_put_att_TwoByteInt
+
+    nf90_put_att_TwoByteInt = -1
+  end function nf90_put_att_TwoByteInt
+  ! -------
+  function nf90_put_att_one_TwoByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind =  TwoByteInt),               intent( in) :: values
+    integer                                                 :: nf90_put_att_one_TwoByteInt
+
+    nf90_put_att_one_TwoByteInt = -1
+  end function nf90_put_att_one_TwoByteInt
+  ! -------
+  function nf90_get_att_TwoByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind =  TwoByteInt), dimension(:), intent(out) :: values
+    integer                                                 :: nf90_get_att_TwoByteInt
+
+    nf90_get_att_TwoByteInt = -1
+  end function nf90_get_att_TwoByteInt
+  ! -------
+  function nf90_get_att_one_TwoByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind =  TwoByteInt),               intent(out) :: values
+    integer                                                 :: nf90_get_att_one_TwoByteInt
+
+    nf90_get_att_one_TwoByteInt = -1
+  end function nf90_get_att_one_TwoByteInt
+  ! -------
+  function nf90_put_att_FourByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind = FourByteInt), dimension(:), intent( in) :: values
+    integer                                                 :: nf90_put_att_FourByteInt
+
+    nf90_put_att_FourByteInt = -1
+  end function nf90_put_att_FourByteInt
+  ! -------
+  function nf90_put_att_one_FourByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind = FourByteInt),               intent( in) :: values
+    integer                                                 :: nf90_put_att_one_FourByteInt
+
+    nf90_put_att_one_FourByteInt = -1
+  end function nf90_put_att_one_FourByteInt
+  ! -------
+  function nf90_get_att_FourByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind = FourByteInt), dimension(:), intent(out) :: values
+    integer                                                 :: nf90_get_att_FourByteInt
+
+    nf90_get_att_FourByteInt = -1
+  end function nf90_get_att_FourByteInt
+  ! -------
+  function nf90_get_att_one_FourByteInt(ncid, varid, name, values)
+    integer,                                    intent( in) :: ncid, varid
+    character(len = *),                         intent( in) :: name
+    integer (kind = FourByteInt),               intent(out) :: values
+    integer                                                 :: nf90_get_att_one_FourByteInt
+
+    nf90_get_att_one_FourByteInt = -1
+  end function nf90_get_att_one_FourByteInt
+  ! -------
+  function nf90_put_att_EightByteInt(ncid, varid, name, values)
+    integer,                                     intent( in) :: ncid, varid
+    character(len = *),                          intent( in) :: name
+    integer (kind = EightByteInt), dimension(:), intent( in) :: values
+    integer                                                  :: nf90_put_att_EightByteInt
+
+    nf90_put_att_EightByteInt = -1
+  end function nf90_put_att_EightByteInt
+  ! -------
+  function nf90_put_att_one_EightByteInt(ncid, varid, name, values)
+    integer,                                     intent( in) :: ncid, varid
+    character(len = *),                          intent( in) :: name
+    integer (kind = EightByteInt),               intent( in) :: values
+    integer                                                  :: nf90_put_att_one_EightByteInt
+
+    nf90_put_att_one_EightByteInt = -1
+  end function nf90_put_att_one_EightByteInt
+  ! -------
+  function nf90_get_att_EightByteInt(ncid, varid, name, values)
+    integer,                                     intent( in) :: ncid, varid
+    character(len = *),                          intent( in) :: name
+    integer (kind = EightByteInt), dimension(:), intent(out) :: values
+    integer                                                  :: nf90_get_att_EightByteInt
+
+    nf90_get_att_EightByteInt = -1
+  end function nf90_get_att_EightByteInt
+  ! -------
+  function nf90_get_att_one_EightByteInt(ncid, varid, name, values)
+    integer,                                     intent( in) :: ncid, varid
+    character(len = *),                          intent( in) :: name
+    integer (kind = EightByteInt),               intent(out) :: values
+    integer                                                  :: nf90_get_att_one_EightByteInt
+
+    nf90_get_att_one_EightByteInt = -1
+  end function nf90_get_att_one_EightByteInt
+  ! -------
+  ! Real attributes
+  ! -------
+  function nf90_put_att_FourByteReal(ncid, varid, name, values)
+    integer,                                   intent( in) :: ncid, varid
+    character(len = *),                        intent( in) :: name
+    real (kind =  FourByteReal), dimension(:), intent( in) :: values
+    integer                                                :: nf90_put_att_FourByteReal
+
+    nf90_put_att_FourByteReal = -1
+  end function nf90_put_att_FourByteReal
+  ! -------
+  function nf90_put_att_one_FourByteReal(ncid, varid, name, values)
+    integer,                                   intent( in) :: ncid, varid
+    character(len = *),                        intent( in) :: name
+    real (kind =  FourByteReal),               intent( in) :: values
+    integer                                                :: nf90_put_att_one_FourByteReal
+
+    nf90_put_att_one_FourByteReal = -1
+  end function nf90_put_att_one_FourByteReal
+  ! -------
+  function nf90_get_att_FourByteReal(ncid, varid, name, values)
+    integer,                                   intent( in) :: ncid, varid
+    character(len = *),                        intent( in) :: name
+    real (kind =  FourByteReal), dimension(:), intent(out) :: values
+    integer                                                :: nf90_get_att_FourByteReal
+
+    nf90_get_att_FourByteReal = -1
+  end function nf90_get_att_FourByteReal
+  ! -------
+  function nf90_get_att_one_FourByteReal(ncid, varid, name, values)
+    integer,                                   intent( in) :: ncid, varid
+    character(len = *),                        intent( in) :: name
+    real (kind =  FourByteReal),               intent(out) :: values
+    integer                                                :: nf90_get_att_one_FourByteReal
+
+    nf90_get_att_one_FourByteReal = -1
+  end function nf90_get_att_one_FourByteReal
+  ! -------
+  function nf90_put_att_EightByteReal(ncid, varid, name, values)
+    integer,                                   intent( in) :: ncid, varid
+    character(len = *),                        intent( in) :: name
+    real (kind = EightByteReal), dimension(:), intent( in) :: values
+    integer                                                :: nf90_put_att_EightByteReal
+
+    nf90_put_att_EightByteReal = -1
+  end function nf90_put_att_EightByteReal
+  ! -------
+  function nf90_put_att_one_EightByteReal(ncid, varid, name, values)
+    integer,                                   intent( in) :: ncid, varid
+    character(len = *),                        intent( in) :: name
+    real (kind = EightByteReal),               intent( in) :: values
+    integer                                                :: nf90_put_att_one_EightByteReal
+
+    nf90_put_att_one_EightByteReal = -1
+  end function nf90_put_att_one_EightByteReal
+  ! -------
+  function nf90_get_att_EightByteReal(ncid, varid, name, values)
+    integer,                                   intent( in) :: ncid, varid
+    character(len = *),                        intent( in) :: name
+    real (kind = EightByteReal), dimension(:), intent(out) :: values
+    integer                                                :: nf90_get_att_EightByteReal
+
+    nf90_get_att_EightByteReal = -1
+  end function nf90_get_att_EightByteReal
+  ! -------
+  function nf90_get_att_one_EightByteReal(ncid, varid, name, values)
+    integer,                                   intent( in) :: ncid, varid
+    character(len = *),                        intent( in) :: name
+    real (kind = EightByteReal),               intent(out) :: values
+    integer                                                :: nf90_get_att_one_EightByteReal
+
+    nf90_get_att_one_EightByteReal = -1
+  end function nf90_get_att_one_EightByteReal
+  ! -------
diff --git a/ext/DUMMY_NETCDF/netcdf_constants.h90 b/ext/DUMMY_NETCDF/netcdf_constants.h90
new file mode 100644
index 0000000000000000000000000000000000000000..3d18347110ac51203d4dc261d88a838abe25ae3c
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf_constants.h90
@@ -0,0 +1,262 @@
+  !
+  ! external netcdf data types:
+  !
+  integer, parameter, public :: &
+    nf90_byte   = 1,            &
+    nf90_int1   = nf90_byte,    &
+    nf90_char   = 2,            &
+    nf90_short  = 3,            &
+    nf90_int2   = nf90_short,   &
+    nf90_int    = 4,            &
+    nf90_int4   = nf90_int,     &
+    nf90_float  = 5,            &
+    nf90_real   = nf90_float,   &
+    nf90_real4  = nf90_float,   &
+    nf90_double = 6,            &
+    nf90_real8  = nf90_double
+                        
+  !
+  ! default fill values:
+  !
+  character (len = 1),           parameter, public :: &
+    nf90_fill_char  = achar(0)
+  integer (kind =  OneByteInt),  parameter, public :: &
+    nf90_fill_byte  = -127,                           &
+    nf90_fill_int1  = nf90_fill_byte
+  integer (kind =  TwoByteInt),  parameter, public :: &
+    nf90_fill_short = -32767,                         &
+    nf90_fill_int2  = nf90_fill_short
+  integer (kind = FourByteInt),  parameter, public :: &
+    nf90_fill_int   = -2147483647
+  real   (kind =  FourByteReal), parameter, public :: &
+    nf90_fill_float = 9.9692099683868690e+36,         &
+    nf90_fill_real  = nf90_fill_float,                &
+    nf90_fill_real4 = nf90_fill_float
+  real   (kind = EightByteReal), parameter, public :: &
+    nf90_fill_double = 9.9692099683868690e+36,        &
+    nf90_fill_real8  = nf90_fill_double
+
+  !
+  ! mode flags for opening and creating a netcdf dataset:
+  !
+  integer, parameter, public :: &
+    nf90_nowrite   = 0,         &
+    nf90_write     = 1,         &
+    nf90_clobber   = 0,         &
+    nf90_noclobber = 4,         &
+    nf90_fill      = 0,         &
+    nf90_nofill    = 256,       &
+    nf90_64bit_offset = 512,              &
+    nf90_64bit_data   = 32,               &
+    nf90_cdf5         = nf90_64bit_data,  &
+    nf90_lock      = 1024,      &
+    nf90_share     = 2048,      & 
+    nf90_diskless  = 8,         &
+    nf90_mmap      = 16
+  
+  integer, parameter, public ::  &
+    nf90_sizehint_default = 0,   & 
+    nf90_align_chunk      = -1 
+
+  !
+  ! size argument for defining an unlimited dimension:
+  !
+  integer, parameter, public :: nf90_unlimited = 0
+
+  !
+  ! global attribute id:
+  !
+  integer, parameter, public :: nf90_global = 0
+
+  !
+  ! implementation limits:
+  !
+  integer, parameter, public :: &
+    nf90_max_dims     = 1024,    &
+    nf90_max_attrs    = 8192,   &
+    nf90_max_vars     = 8192,   &
+    nf90_max_name     = 256,    &
+    nf90_max_var_dims = 1024
+  
+  !
+  ! error codes:
+  !
+  integer, parameter, public :: &
+    nf90_noerr        = 0,      & ! No Error
+    nf90_ebadid       = -33,    & ! Not a valid ID
+    nf90_eexist       = -35,    & ! netcdf file exists && NF90_NOCLOBBER
+    nf90_einval       = -36,    & ! Invalid Argument
+    nf90_eperm        = -37,    & ! Write to read only
+    nf90_enotindefine = -38,    & ! Operation not allowed in data mode
+    nf90_eindefine    = -39,    & ! Operation not allowed in define mode
+    nf90_einvalcoords = -40,    & ! Index exceeds dimension bound
+    nf90_emaxdims     = -41,    & ! nf90_max_dims exceeded
+    nf90_enameinuse   = -42,    & ! String match to name in use
+    nf90_enotatt      = -43,    & ! Attribute not found
+    nf90_emaxatts     = -44,    & ! nf90_max_attrs exceeded
+    nf90_ebadtype     = -45,    & ! Not a netcdf data type
+    nf90_ebaddim      = -46,    & ! Invalid dimension id or name
+    nf90_eunlimpos    = -47,    & ! nf90_unlimited in the wrong index
+    nf90_emaxvars     = -48,    & ! nf90_max_vars exceeded
+    nf90_enotvar      = -49,    & ! The variable ID is invalid for the specified netCDF dataset.
+    nf90_eglobal      = -50,    & ! Action prohibited on nf90_global varid
+    nf90_enotnc       = -51,    & ! Not a netcdf file
+    nf90_ests         = -52,    & ! In Fortran, string too short
+    nf90_emaxname     = -53,    & ! nf90_max_name exceeded
+    nf90_eunlimit     = -54,    & ! nf90_unlimited size already in use
+    nf90_enorecvars   = -55,    & ! nc_rec op when there are no record vars
+    nf90_echar        = -56,    & ! Attempt to convert between text & numbers
+    nf90_eedge        = -57,    & ! Start+count exceeds dimension bound
+    nf90_estride      = -58,    & ! Illegal stride
+    nf90_ebadname     = -59,    & ! Attribute or variable name contains illegal characters
+    nf90_erange       = -60,    & ! Math result not representable
+    nf90_enomem       = -61,    & ! Memory allocation (malloc) failure
+    nf90_evarsize     = -62,    & ! One or more variable sizes violate format constraints 
+    nf90_edimsize     = -63,    & ! Invalid dimension size
+    nf90_etrunc       = -64,    & ! File likely truncated or possibly corrupted
+    nf90_eaxistype    = -65       ! Unknown axis type.
+  !
+  ! more error codes for DAP
+  !
+  integer, parameter, public :: &
+    nf90_edap         = -66,    & ! Generic DAP error
+    nf90_ecurl        = -67,    & ! Generic libcurl error
+    nf90_eio          = -68,    & ! Generic IO error
+    nf90_enodata      = -69,    & ! Attempt to access variable with no data
+    nf90_edapsvc      = -70,    & ! DAP server error
+    nf90_edas         = -71,    & ! Malformed or inaccessible DAS
+    nf90_edds         = -72,    & ! Malformed or inaccessible DDS
+    nf90_edatadds     = -73,    & ! Malformed or inaccessible DATADDS
+    nf90_edapurl      = -74,    & ! Malformed DAP URL
+    nf90_edapconstraint = -75,  & ! Malformed DAP Constrain
+    nf90_etranslation = -76,    & ! Untranslatable construct
+    nf904_first_error = -100
+  !
+  ! error codes for netCDF-4
+  !
+integer, parameter, public :: &
+    nf90_ehdferr      = -101,    & ! Error at HDF5 layer. 
+    nf90_ecantread    = -102,    & ! Can't read. 
+    nf90_ecantwrite   = -103,    & ! Can't write. 
+    nf90_ecantcreate  = -104,    & ! Can't create. 
+    nf90_efilemeta    = -105,    & ! Problem with file metadata. 
+    nf90_edimmeta     = -106,    & ! Problem with dimension metadata. 
+    nf90_eattmeta     = -107,    & ! Problem with attribute metadata. 
+    nf90_evarmeta     = -108,    & ! Problem with variable metadata. 
+    nf90_enocompound  = -109,    & ! Not a compound type. 
+    nf90_eattexists   = -110,    & ! Attribute already exists. 
+    nf90_enotnc4      = -111,    & ! Attempting netcdf-4 operation on netcdf-3 file.   
+    nf90_estrictnc3   = -112,    & ! Attempting netcdf-4 operation on strict nc3 netcdf-4 file.   
+    nf90_enotnc3      = -113,    & ! Attempting netcdf-3 operation on netcdf-4 file.   
+    nf90_enopar       = -114,    & ! Parallel operation on file opened for non-parallel access.   
+    nf90_eparinit     = -115,    & ! Error initializing for parallel access.   
+    nf90_ebadgrpid    = -116,    & ! Bad group ID.   
+    nf90_ebadtypid    = -117,    & ! Bad type ID.   
+    nf90_etypdefined  = -118,    & ! Type has already been defined and may not be edited. 
+    nf90_ebadfield    = -119,    & ! Bad field ID.   
+    nf90_ebadclass    = -120,    & ! Bad class.   
+    nf90_emaptype     = -121,    & ! Mapped access for atomic types only.   
+    nf90_elatefill    = -122,    & ! Attempt to define fill value when data already exists. 
+    nf90_elatedef     = -123,    & ! Attempt to define var properties, like deflate, after enddef. 
+    nf90_edimscale    = -124,    & ! Probem with HDF5 dimscales.
+    nf90_enogrp       = -125,    & ! No group found.
+    nf90_estorage     = -126,    & ! Can't specify both contiguous and chunking.
+    nf90_ebadchunk    = -127,    & ! Bad chunksize.
+    nf90_enotbuilt    = -128,    & ! Attempt to use feature that was not turned on when netCDF was built.
+    nf90_ediskless    = -129,    & ! Error in using diskless  access. 
+    nf90_ecantextend  = -130,    & ! Attempt to extend dataset during ind. I/O operation. 
+    nf90_empi         = -131,    & ! MPI operation failed. 
+    nf90_efilter      = -132,    & ! Filter operation failed.
+    nf90_ercfile      = -133,    & ! RC file failure
+    nf90_enullpad     = -134,    & ! Header Bytes not Null-Byte padded
+    nf90_einmemory    = -135,    & ! In-memory file error
+    nf90_enofilter    = -136,    & ! Filter not defined on variable.
+    nf90_enczarr      = -137,    & ! Error at NCZarr layer.
+    nf90_es3          = -138,    & ! Generic S3 error
+    nf90_eempty       = -139,    & ! Attempt to read empty NCZarr map key
+    nf90_eobject      = -140,    & ! Some object exists when it should not
+    nf90_enoobject    = -141,    & ! Some object not found
+    nf90_eplugin      = -142,    & ! Unclassified failure in accessing a dynamically loaded plugin>
+    nf904_last_error  = -142
+
+  !
+  ! error handling modes:
+  !
+  integer, parameter, public :: &
+    nf90_fatal   = 1,           &
+    nf90_verbose = 2
+
+  !
+  ! format version numbers:
+  !
+  integer, parameter, public :: &
+    nf90_format_classic = 1,    &
+    nf90_format_64bit = 2,      &
+    nf90_format_64bit_offset = nf90_format_64bit, &
+    nf90_format_64bit_data = 5,                   &
+    nf90_format_cdf5 = nf90_format_64bit_data,    &
+    nf90_format_netcdf4 = 3,    &
+    nf90_format_netcdf4_classic = 4
+
+! extra data types:
+integer, parameter, public :: &
+     nf90_ubyte = 7, &
+     nf90_ushort = 8, &
+     nf90_uint = 9, &
+     nf90_int64 = 10, &
+     nf90_uint64 = 11, &
+     nf90_string = 12, &
+     nf90_vlen = 13, &
+     nf90_opaque = 14, &
+     nf90_enum = 15, &
+     nf90_compound = 16
+
+                        
+! extra default fill values:
+integer (kind =  TwoByteInt),  parameter, public :: &
+     nf90_fill_ubyte  = 255,                        &
+     nf90_fill_uint1  = nf90_fill_ubyte
+integer (kind =  FourByteInt),  parameter, public :: &
+     nf90_fill_ushort = 65535,                      &
+     nf90_fill_uint2  = nf90_fill_ushort
+integer (kind = EightByteInt),  parameter, public :: &
+     nf90_fill_uint   = 4294967295_EightByteInt
+
+! Extra file create mode flags.
+integer, parameter, public :: &
+     nf90_netcdf4 = 4096, &
+     nf90_hdf5 = 4096, & ! deprecated
+     nf90_classic_model = 256
+
+! Flags for parallel access.
+integer, parameter, public :: nf90_independent = 0, nf90_collective = 1
+
+! Flags for parallel I/O.
+integer, parameter, public :: nf90_mpiio = 8192, nf90_mpiposix = 16384, &
+     nf90_pnetcdf = 32768
+  
+! Extra variable flags.
+integer, parameter, public :: &
+     nf90_chunk_seq = 0, &
+     nf90_chunk_sub = 1, &
+     nf90_chunk_sizes = 2, &
+     nf90_endian_native = 0, &
+     nf90_endian_little = 1, &
+     nf90_endian_big = 2, &
+     nf90_chunked = 0, &
+     nf90_notcontiguous = 0, &
+     nf90_contiguous = 1, &
+     nf90_compact = 2, &
+     nf90_nochecksum = 0, &
+     nf90_fletcher32 = 1, &
+     nf90_noshuffle = 0, &
+     nf90_shuffle = 1, &
+     nf90_szip_ec_option_mask = 4, &
+     nf90_szip_nn_option_mask = 32, &
+     nf90_noquantize = 0, &
+     nf90_quantize_bitgroom = 1
+
+! This is the position of NC_NETCDF4 in cmode, counting from the
+! right, starting (uncharacteristically for fortran) at 0. It's needed
+! for the BTEST function calls.
+integer, parameter, private :: NETCDF4_BIT = 12
diff --git a/ext/DUMMY_NETCDF/netcdf_dims.h90 b/ext/DUMMY_NETCDF/netcdf_dims.h90
new file mode 100644
index 0000000000000000000000000000000000000000..5221d7e65d12bcadf3ae2779891d2fb7cbee577c
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf_dims.h90
@@ -0,0 +1,41 @@
+  !
+  ! Dimension routines:
+  !
+  ! -----------
+  function nf90_def_dim(ncid, name, len, dimid)
+    integer,             intent( in) :: ncid
+    character (len = *), intent( in) :: name
+    integer,             intent( in) :: len
+    integer,             intent(out) :: dimid
+    integer                          :: nf90_def_dim
+  
+    nf90_def_dim = -1
+  end function nf90_def_dim
+  ! -----------
+  function nf90_inq_dimid(ncid, name, dimid)
+    integer,             intent( in) :: ncid
+    character (len = *), intent( in) :: name
+    integer,             intent(out) :: dimid
+    integer                          :: nf90_inq_dimid
+    
+    nf90_inq_dimid = -1
+  end function nf90_inq_dimid
+  ! -----------
+  function nf90_rename_dim(ncid, dimid, name)
+    integer,             intent( in) :: ncid
+    character (len = *), intent( in) :: name
+    integer,             intent( in) :: dimid
+    integer                          :: nf90_rename_dim
+
+    nf90_rename_dim = -1
+  end function nf90_rename_dim
+  ! -----------
+  function nf90_inquire_dimension(ncid, dimid, name, len)
+    integer,                       intent( in) :: ncid, dimid
+    character (len = *), optional, intent(out) :: name
+    integer,             optional, intent(out) :: len
+    integer                                    :: nf90_inquire_dimension
+     
+    nf90_inquire_dimension = -1
+  end function nf90_inquire_dimension
+  ! -----------
diff --git a/ext/DUMMY_NETCDF/netcdf_eightbyte_subset.h90 b/ext/DUMMY_NETCDF/netcdf_eightbyte_subset.h90
new file mode 100644
index 0000000000000000000000000000000000000000..771fcd1b0ff52034253abc4070394fb9949c0af3
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf_eightbyte_subset.h90
@@ -0,0 +1,96 @@
+  function nf90_put_var_1D_EightByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = EightByteInt), dimension(:), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_1D_EightByteInt
+
+     nf90_put_var_1D_EightByteInt = -1
+   end function nf90_put_var_1D_EightByteInt
+
+
+   function nf90_put_var_2D_EightByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = EightByteInt), dimension(:, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_2D_EightByteInt
+     
+     nf90_put_var_2D_EightByteInt = -1
+   end function nf90_put_var_2D_EightByteInt
+
+
+   function nf90_put_var_3D_EightByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = EightByteInt), dimension(:, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_3D_EightByteInt
+     
+     nf90_put_var_3D_EightByteInt = -1
+   end function nf90_put_var_3D_EightByteInt
+
+
+   function nf90_put_var_4D_EightByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = EightByteInt), dimension(:, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_4D_EightByteInt
+ 
+     nf90_put_var_4D_EightByteInt = -1
+   end function nf90_put_var_4D_EightByteInt
+
+
+   function nf90_put_var_5D_EightByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = EightByteInt), dimension(:, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_5D_EightByteInt
+ 
+     nf90_put_var_5D_EightByteInt = -1
+   end function nf90_put_var_5D_EightByteInt
+
+
+   function nf90_put_var_6D_EightByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = EightByteInt), dimension(:, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_6D_EightByteInt
+ 
+     nf90_put_var_6D_EightByteInt = -1
+   end function nf90_put_var_6D_EightByteInt
+
+
+   function nf90_put_var_7D_EightByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = EightByteInt), dimension(:, :, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_7D_EightByteInt
+ 
+     nf90_put_var_7D_EightByteInt = -1
+   end function nf90_put_var_7D_EightByteInt
+
+   function nf90_put_var_EightByteInt(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = EightByteInt), intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_put_var_EightByteInt
+
+     nf90_put_var_EightByteInt = -1
+   end function nf90_put_var_EightByteInt
+
+
+   function nf90_get_var_EightByteInt(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = EightByteInt), intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_get_var_EightByteInt
+
+     nf90_get_var_EightByteInt = -1
+   end function nf90_get_var_EightByteInt
+
+
diff --git a/ext/DUMMY_NETCDF/netcdf_expanded_subset.h90 b/ext/DUMMY_NETCDF/netcdf_expanded_subset.h90
new file mode 100644
index 0000000000000000000000000000000000000000..535dd1ea64c50d25cbb03d45571556e97b6753f5
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf_expanded_subset.h90
@@ -0,0 +1,487 @@
+
+   function nf90_put_var_OneByteInt(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = OneByteInt), intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_put_var_OneByteInt
+ 
+     nf90_put_var_OneByteInt = -1
+   end function nf90_put_var_OneByteInt
+
+
+   function nf90_put_var_TwoByteInt(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = TwoByteInt), intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_put_var_TwoByteInt
+ 
+     nf90_put_var_TwoByteInt = -1
+   end function nf90_put_var_TwoByteInt
+
+
+   function nf90_put_var_FourByteInt(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = FourByteInt), intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_put_var_FourByteInt
+ 
+     nf90_put_var_FourByteInt = -1
+   end function nf90_put_var_FourByteInt
+
+
+   function nf90_put_var_FourByteReal(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = FourByteReal), intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_put_var_FourByteReal
+
+     nf90_put_var_FourByteReal = -1
+   end function nf90_put_var_FourByteReal
+
+
+   function nf90_put_var_EightByteReal(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = EightByteReal), intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_put_var_EightByteReal
+ 
+     nf90_put_var_EightByteReal = -1
+   end function nf90_put_var_EightByteReal
+
+
+   function nf90_get_var_OneByteInt(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = OneByteInt), intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_get_var_OneByteInt
+
+     nf90_get_var_OneByteInt = -1
+   end function nf90_get_var_OneByteInt
+
+
+   function nf90_get_var_TwoByteInt(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = TwoByteInt), intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_get_var_TwoByteInt
+
+     nf90_get_var_TwoByteInt = -1
+   end function nf90_get_var_TwoByteInt
+
+
+   function nf90_get_var_FourByteInt(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = FourByteInt), intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_get_var_FourByteInt
+
+     nf90_get_var_FourByteInt = -1
+   end function nf90_get_var_FourByteInt
+
+
+   function nf90_get_var_FourByteReal(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = FourByteReal), intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_get_var_FourByteReal
+
+     nf90_get_var_FourByteReal = -1
+   end function nf90_get_var_FourByteReal
+
+
+   function nf90_get_var_EightByteReal(ncid, varid, values, start)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = EightByteReal), intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start
+     integer                                      :: nf90_get_var_EightByteReal
+
+     nf90_get_var_EightByteReal = -1
+   end function nf90_get_var_EightByteReal
+
+
+
+   function nf90_put_var_1D_OneByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = OneByteInt), dimension(:), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_1D_OneByteInt
+
+     nf90_put_var_1D_OneByteInt = -1
+   end function nf90_put_var_1D_OneByteInt
+
+
+   function nf90_put_var_2D_OneByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = OneByteInt), dimension(:, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_2D_OneByteInt
+ 
+
+     nf90_put_var_2D_OneByteInt = -1
+   end function nf90_put_var_2D_OneByteInt
+
+
+   function nf90_put_var_3D_OneByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = OneByteInt), dimension(:, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_3D_OneByteInt
+
+     nf90_put_var_3D_OneByteInt = -1
+   end function nf90_put_var_3D_OneByteInt
+
+
+   function nf90_put_var_4D_OneByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = OneByteInt), dimension(:, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_4D_OneByteInt
+ 
+     nf90_put_var_4D_OneByteInt = -1
+   end function nf90_put_var_4D_OneByteInt
+
+
+   function nf90_put_var_5D_OneByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = OneByteInt), dimension(:, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_5D_OneByteInt
+ 
+     nf90_put_var_5D_OneByteInt = -1
+   end function nf90_put_var_5D_OneByteInt
+
+
+   function nf90_put_var_6D_OneByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = OneByteInt), dimension(:, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_6D_OneByteInt
+ 
+     nf90_put_var_6D_OneByteInt = -1
+   end function nf90_put_var_6D_OneByteInt
+
+
+   function nf90_put_var_7D_OneByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = OneByteInt), dimension(:, :, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_7D_OneByteInt
+ 
+     nf90_put_var_7D_OneByteInt = -1
+   end function nf90_put_var_7D_OneByteInt
+
+
+   function nf90_put_var_1D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = TwoByteInt), dimension(:), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_1D_TwoByteInt
+ 
+     nf90_put_var_1D_TwoByteInt = -1
+   end function nf90_put_var_1D_TwoByteInt
+
+
+   function nf90_put_var_2D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = TwoByteInt), dimension(:, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_2D_TwoByteInt
+ 
+     nf90_put_var_2D_TwoByteInt = -1
+   end function nf90_put_var_2D_TwoByteInt
+
+
+   function nf90_put_var_3D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = TwoByteInt), dimension(:, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_3D_TwoByteInt
+ 
+       nf90_put_var_3D_TwoByteInt = -1
+   end function nf90_put_var_3D_TwoByteInt
+
+
+   function nf90_put_var_4D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = TwoByteInt), dimension(:, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_4D_TwoByteInt
+ 
+     nf90_put_var_4D_TwoByteInt = -1
+   end function nf90_put_var_4D_TwoByteInt
+
+
+   function nf90_put_var_5D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = TwoByteInt), dimension(:, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_5D_TwoByteInt
+ 
+     nf90_put_var_5D_TwoByteInt = -1
+   end function nf90_put_var_5D_TwoByteInt
+
+
+   function nf90_put_var_6D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = TwoByteInt), dimension(:, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_6D_TwoByteInt
+ 
+     nf90_put_var_6D_TwoByteInt = -1
+   end function nf90_put_var_6D_TwoByteInt
+
+
+   function nf90_put_var_7D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = TwoByteInt), dimension(:, :, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_7D_TwoByteInt
+ 
+     nf90_put_var_7D_TwoByteInt = -1
+   end function nf90_put_var_7D_TwoByteInt
+
+
+   function nf90_put_var_1D_FourByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = FourByteInt), dimension(:), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_1D_FourByteInt
+ 
+     nf90_put_var_1D_FourByteInt = -1
+   end function nf90_put_var_1D_FourByteInt
+
+
+   function nf90_put_var_2D_FourByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = FourByteInt), dimension(:, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_2D_FourByteInt
+ 
+     nf90_put_var_2D_FourByteInt = -1
+   end function nf90_put_var_2D_FourByteInt
+
+
+   function nf90_put_var_3D_FourByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = FourByteInt), dimension(:, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_3D_FourByteInt
+ 
+     nf90_put_var_3D_FourByteInt = -1
+   end function nf90_put_var_3D_FourByteInt
+
+
+   function nf90_put_var_4D_FourByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = FourByteInt), dimension(:, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_4D_FourByteInt
+ 
+     nf90_put_var_4D_FourByteInt = -1
+   end function nf90_put_var_4D_FourByteInt
+
+
+   function nf90_put_var_5D_FourByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = FourByteInt), dimension(:, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_5D_FourByteInt
+ 
+     nf90_put_var_5D_FourByteInt = -1
+   end function nf90_put_var_5D_FourByteInt
+
+
+   function nf90_put_var_6D_FourByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = FourByteInt), dimension(:, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_6D_FourByteInt
+ 
+     nf90_put_var_6D_FourByteInt = -1
+   end function nf90_put_var_6D_FourByteInt
+
+
+   function nf90_put_var_7D_FourByteInt(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     integer (kind = FourByteInt), dimension(:, :, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_7D_FourByteInt
+ 
+     nf90_put_var_7D_FourByteInt = -1
+   end function nf90_put_var_7D_FourByteInt
+
+
+    function nf90_put_var_1D_FourByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = FourByteReal), dimension(:), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_1D_FourByteReal
+ 
+     nf90_put_var_1D_FourByteReal = -1
+   end function nf90_put_var_1D_FourByteReal
+
+
+   function nf90_put_var_2D_FourByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = FourByteReal), dimension(:, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_2D_FourByteReal
+ 
+     nf90_put_var_2D_FourByteReal = -1
+   end function nf90_put_var_2D_FourByteReal
+
+
+   function nf90_put_var_3D_FourByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = FourByteReal), dimension(:, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_3D_FourByteReal
+ 
+     nf90_put_var_3D_FourByteReal = -1
+   end function nf90_put_var_3D_FourByteReal
+
+
+   function nf90_put_var_4D_FourByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = FourByteReal), dimension(:, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_4D_FourByteReal
+ 
+     nf90_put_var_4D_FourByteReal = -1
+   end function nf90_put_var_4D_FourByteReal
+
+
+   function nf90_put_var_5D_FourByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = FourByteReal), dimension(:, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_5D_FourByteReal
+ 
+     nf90_put_var_5D_FourByteReal = -1
+   end function nf90_put_var_5D_FourByteReal
+
+
+   function nf90_put_var_6D_FourByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = FourByteReal), dimension(:, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_6D_FourByteReal
+ 
+     nf90_put_var_6D_FourByteReal = -1
+   end function nf90_put_var_6D_FourByteReal
+
+
+   function nf90_put_var_7D_FourByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = FourByteReal), dimension(:, :, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_7D_FourByteReal
+ 
+     nf90_put_var_7D_FourByteReal = -1
+   end function nf90_put_var_7D_FourByteReal
+
+
+   function nf90_put_var_1D_EightByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = EightByteReal), dimension(:), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_1D_EightByteReal
+ 
+     nf90_put_var_1D_EightByteReal = -1
+   end function nf90_put_var_1D_EightByteReal
+
+
+   function nf90_put_var_2D_EightByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = EightByteReal), dimension(:, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_2D_EightByteReal
+ 
+     nf90_put_var_2D_EightByteReal = -1
+   end function nf90_put_var_2D_EightByteReal
+
+
+   function nf90_put_var_3D_EightByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = EightByteReal), dimension(:, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_3D_EightByteReal
+ 
+     nf90_put_var_3D_EightByteReal = -1
+   end function nf90_put_var_3D_EightByteReal
+
+
+   function nf90_put_var_4D_EightByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = EightByteReal), dimension(:, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_4D_EightByteReal
+ 
+     nf90_put_var_4D_EightByteReal = -1
+   end function nf90_put_var_4D_EightByteReal
+
+
+   function nf90_put_var_5D_EightByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = EightByteReal), dimension(:, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_5D_EightByteReal
+ 
+     nf90_put_var_5D_EightByteReal = -1
+   end function nf90_put_var_5D_EightByteReal
+
+
+   function nf90_put_var_6D_EightByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = EightByteReal), dimension(:, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_6D_EightByteReal
+ 
+     nf90_put_var_6D_EightByteReal = -1
+   end function nf90_put_var_6D_EightByteReal
+
+
+   function nf90_put_var_7D_EightByteReal(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     real (kind = EightByteReal), dimension(:, :, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_7D_EightByteReal
+ 
+     nf90_put_var_7D_EightByteReal = -1
+   end function nf90_put_var_7D_EightByteReal
+
diff --git a/ext/DUMMY_NETCDF/netcdf_file.h90 b/ext/DUMMY_NETCDF/netcdf_file.h90
new file mode 100644
index 0000000000000000000000000000000000000000..27595be0460c5eb945a7e02b17f3f9f38b2aa36d
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf_file.h90
@@ -0,0 +1,136 @@
+! This is part of the netCDF F90 API, or. Copyright 2006 UCAR. See COPYRIGHT file
+! for details.
+
+! This file contains the netcdf file functions that are shared by
+! netcdf-3 and netcdf-4.
+
+! Ed Hartnett, 2010
+! -------
+function nf90_inq_libvers()
+  character(len = 80) :: nf90_inq_libvers
+
+  nf90_inq_libvers = ""
+end function nf90_inq_libvers
+! -------
+function nf90_strerror(ncerr)
+  integer, intent( in) :: ncerr
+  character(len = 80)  :: nf90_strerror
+
+  nf90_strerror = ""
+end function nf90_strerror
+! -------
+!
+! File level control routines:
+!
+function nf90_inq_base_pe(ncid, pe)
+  integer, intent( in) :: ncid
+  integer, intent(out) :: pe
+  integer              :: nf90_inq_base_pe
+
+  nf90_inq_base_pe = -1
+end function nf90_inq_base_pe
+! -------
+function nf90_set_base_pe(ncid, pe)
+  integer, intent( in) :: ncid, pe
+  integer              :: nf90_set_base_pe
+
+  nf90_set_base_pe = -1
+end function nf90_set_base_pe
+! -------
+function nf90_create_mp(path, cmode, initalsz, basepe, chunksizehint, ncid)
+  character (len = *), intent( in) :: path
+  integer,             intent( in) :: cmode, initalsz, basepe, chunksizehint
+  integer,             intent(out) :: ncid
+  integer                          :: nf90_create_mp
+
+  nf90_create_mp = -1
+end function nf90_create_mp
+! -------
+function nf90_open_mp(path, mode, basepe, chunksizeint, ncid)
+  character (len = *), intent( in) :: path
+  integer,             intent( in) :: mode, basepe, chunksizeint
+  integer,             intent(out) :: ncid
+  integer                          :: nf90_open_mp
+
+  nf90_open_mp = -1
+end function nf90_open_mp
+! -------
+function nf90_set_fill(ncid, fillmode, old_mode)
+  integer, intent( in) :: ncid, fillmode 
+  integer, intent(out) :: old_mode
+  integer              :: nf90_set_fill
+
+  nf90_set_fill = -1
+end function nf90_set_fill
+! -------
+function nf90_redef(ncid)
+  integer, intent( in) :: ncid
+  integer              :: nf90_redef
+
+  nf90_redef = -1
+end function nf90_redef
+! -------
+function nf90_enddef(ncid, h_minfree, v_align, v_minfree, r_align)
+  integer,           intent( in) :: ncid
+  integer, optional, intent( in) :: h_minfree, v_align, v_minfree, r_align
+  integer                        :: nf90_enddef
+
+  nf90_enddef = -1
+end function nf90_enddef
+! -------
+function nf90_sync(ncid)
+  integer, intent( in) :: ncid
+  integer              :: nf90_sync
+
+  nf90_sync = -1
+end function nf90_sync
+! -------
+function nf90_abort(ncid)
+  integer, intent( in) :: ncid
+  integer              :: nf90_abort
+
+  nf90_abort = -1
+end function nf90_abort
+! -------
+function nf90_close(ncid)
+  integer, intent( in) :: ncid
+  integer              :: nf90_close
+
+  nf90_close = -1
+end function nf90_close
+! -------
+function nf90_delete(name)
+  character(len = *), intent( in) :: name
+  integer                         :: nf90_delete
+
+  nf90_delete = -1
+end function nf90_delete
+
+!
+! A single file level inquiry routine 
+! 
+function nf90_inquire(ncid, nDimensions, nVariables, nAttributes, unlimitedDimId, formatNum)
+  integer,           intent( in) :: ncid
+  integer, optional, intent(out) :: nDimensions, nVariables, nAttributes, unlimitedDimId, formatNum
+  integer                        :: nf90_inquire
+
+  nf90_inquire = -1
+end function nf90_inquire
+
+function nf90_inq_path(ncid, pathlen, path)
+  integer,            intent(in)    :: ncid
+  integer,            intent(inout) :: pathlen
+  character(len = *), intent(inout) :: path
+  integer                           :: nf90_inq_path
+
+  nf90_inq_path = -1
+end function nf90_inq_path
+
+function nf90_inq_format(ncid, format_type)
+  integer,            intent(in)    :: ncid
+  integer,            intent(out)   :: format_type
+  integer                           :: nf90_inq_format
+
+  nf90_inq_format = -1
+end function nf90_inq_format
+
diff --git a/ext/DUMMY_NETCDF/netcdf_get_nd_expanded.h90 b/ext/DUMMY_NETCDF/netcdf_get_nd_expanded.h90
new file mode 100644
index 0000000000000000000000000000000000000000..9c3153108d662e9f3b0b61b9e339b56e840fd1f3
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf_get_nd_expanded.h90
@@ -0,0 +1,672 @@
+
+function nf90_get_var_1D_OneByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_1D_OneByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int8_t), target, dimension(:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_1D_OneByteInt = -1
+
+end function nf90_get_var_1D_OneByteInt
+
+function nf90_get_var_2D_OneByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_2D_OneByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int8_t), target, dimension(:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_2D_OneByteInt = -1
+
+end function nf90_get_var_2D_OneByteInt
+
+function nf90_get_var_3D_OneByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_3D_OneByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int8_t), target, dimension(:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_3D_OneByteInt = -1
+
+end function nf90_get_var_3D_OneByteInt
+
+function nf90_get_var_4D_OneByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_4D_OneByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int8_t), target, dimension(:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_4D_OneByteInt = -1
+
+end function nf90_get_var_4D_OneByteInt
+
+function nf90_get_var_5D_OneByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_5D_OneByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int8_t), target, dimension(:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_5D_OneByteInt = -1
+
+end function nf90_get_var_5D_OneByteInt
+
+function nf90_get_var_6D_OneByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_6D_OneByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int8_t), target, dimension(:,:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_6D_OneByteInt = -1
+
+end function nf90_get_var_6D_OneByteInt
+
+function nf90_get_var_7D_OneByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_7D_OneByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int8_t), target, dimension(:,:,:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_7D_OneByteInt = -1
+
+end function nf90_get_var_7D_OneByteInt
+
+function nf90_get_var_1D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_1D_TwoByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int16_t), target, dimension(:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_1D_TwoByteInt = -1
+
+end function nf90_get_var_1D_TwoByteInt
+
+function nf90_get_var_2D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_2D_TwoByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int16_t), target, dimension(:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_2D_TwoByteInt = -1
+
+end function nf90_get_var_2D_TwoByteInt
+
+function nf90_get_var_3D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_3D_TwoByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int16_t), target, dimension(:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_3D_TwoByteInt = -1
+
+end function nf90_get_var_3D_TwoByteInt
+
+function nf90_get_var_4D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_4D_TwoByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int16_t), target, dimension(:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_4D_TwoByteInt = -1
+
+end function nf90_get_var_4D_TwoByteInt
+
+function nf90_get_var_5D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_5D_TwoByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int16_t), target, dimension(:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_5D_TwoByteInt = -1
+
+end function nf90_get_var_5D_TwoByteInt
+
+function nf90_get_var_6D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_6D_TwoByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int16_t), target, dimension(:,:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_6D_TwoByteInt = -1
+
+end function nf90_get_var_6D_TwoByteInt
+
+function nf90_get_var_7D_TwoByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_7D_TwoByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int16_t), target, dimension(:,:,:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_7D_TwoByteInt = -1
+
+end function nf90_get_var_7D_TwoByteInt
+
+function nf90_get_var_1D_FourByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_1D_FourByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int32_t), target, dimension(:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_1D_FourByteInt = -1
+
+end function nf90_get_var_1D_FourByteInt
+
+function nf90_get_var_2D_FourByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_2D_FourByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int32_t), target, dimension(:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_2D_FourByteInt = -1
+
+end function nf90_get_var_2D_FourByteInt
+
+function nf90_get_var_3D_FourByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_3D_FourByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int32_t), target, dimension(:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_3D_FourByteInt = -1
+
+end function nf90_get_var_3D_FourByteInt
+
+function nf90_get_var_4D_FourByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_4D_FourByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int32_t), target, dimension(:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_4D_FourByteInt = -1
+
+end function nf90_get_var_4D_FourByteInt
+
+function nf90_get_var_5D_FourByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_5D_FourByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int32_t), target, dimension(:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_5D_FourByteInt = -1
+
+end function nf90_get_var_5D_FourByteInt
+
+function nf90_get_var_6D_FourByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_6D_FourByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int32_t), target, dimension(:,:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_6D_FourByteInt = -1
+
+end function nf90_get_var_6D_FourByteInt
+
+function nf90_get_var_7D_FourByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_7D_FourByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int32_t), target, dimension(:,:,:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_7D_FourByteInt = -1
+
+end function nf90_get_var_7D_FourByteInt
+
+function nf90_get_var_1D_EightByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_1D_EightByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int64_t), target, dimension(:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_1D_EightByteInt = -1
+
+end function nf90_get_var_1D_EightByteInt
+
+function nf90_get_var_2D_EightByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_2D_EightByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int64_t), target, dimension(:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_2D_EightByteInt = -1
+
+end function nf90_get_var_2D_EightByteInt
+
+function nf90_get_var_3D_EightByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_3D_EightByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int64_t), target, dimension(:,:,:), intent(out) :: values
+  INTEGER, DIMENSION(:), OPTIONAL, INTENT(in) :: start, count, stride, map
+  
+  nf90_get_var_3D_EightByteInt = -1
+
+end function nf90_get_var_3D_EightByteInt
+
+function nf90_get_var_4D_EightByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_4D_EightByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int64_t), target, dimension(:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_4D_EightByteInt = -1
+
+end function nf90_get_var_4D_EightByteInt
+
+function nf90_get_var_5D_EightByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_5D_EightByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int64_t), target, dimension(:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_5D_EightByteInt = -1
+
+end function nf90_get_var_5D_EightByteInt
+
+function nf90_get_var_6D_EightByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_6D_EightByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int64_t), target, dimension(:,:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_6D_EightByteInt = -1
+
+end function nf90_get_var_6D_EightByteInt
+
+function nf90_get_var_7D_EightByteInt(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_7D_EightByteInt
+
+  integer, intent(in) :: ncid, varid
+  integer(c_int64_t), target, dimension(:,:,:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_7D_EightByteInt = -1
+
+end function nf90_get_var_7D_EightByteInt
+
+function nf90_get_var_1D_FourByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_1D_FourByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_float), target, dimension(:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_1D_FourByteReal = -1
+
+end function nf90_get_var_1D_FourByteReal
+
+function nf90_get_var_2D_FourByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_2D_FourByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_float), target, dimension(:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_2D_FourByteReal = -1
+
+end function nf90_get_var_2D_FourByteReal
+
+function nf90_get_var_3D_FourByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_3D_FourByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_float), target, dimension(:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_3D_FourByteReal = -1
+
+end function nf90_get_var_3D_FourByteReal
+
+function nf90_get_var_4D_FourByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_4D_FourByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_float), target, dimension(:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_4D_FourByteReal = -1
+
+end function nf90_get_var_4D_FourByteReal
+
+function nf90_get_var_5D_FourByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_5D_FourByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_float), target, dimension(:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_5D_FourByteReal = -1
+
+end function nf90_get_var_5D_FourByteReal
+
+function nf90_get_var_6D_FourByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_6D_FourByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_float), target, dimension(:,:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_6D_FourByteReal = -1
+
+end function nf90_get_var_6D_FourByteReal
+
+function nf90_get_var_7D_FourByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_7D_FourByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_float), target, dimension(:,:,:,:,:,:,:), intent(out) :: values
+  INTEGER, DIMENSION(:), OPTIONAL, INTENT(in) :: start, count, stride, map
+  
+  nf90_get_var_7D_FourByteReal = -1
+
+end function nf90_get_var_7D_FourByteReal
+
+function nf90_get_var_1D_EightByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_1D_EightByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_double), target, dimension(:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_1D_EightByteReal = -1
+
+end function nf90_get_var_1D_EightByteReal
+
+function nf90_get_var_2D_EightByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_2D_EightByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_double), target, dimension(:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_2D_EightByteReal = -1
+
+end function nf90_get_var_2D_EightByteReal
+
+function nf90_get_var_3D_EightByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_3D_EightByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_double), target, dimension(:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_3D_EightByteReal = -1
+
+end function nf90_get_var_3D_EightByteReal
+
+function nf90_get_var_4D_EightByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_4D_EightByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_double), target, dimension(:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_4D_EightByteReal = -1
+
+end function nf90_get_var_4D_EightByteReal
+
+function nf90_get_var_5D_EightByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_5D_EightByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_double), target, dimension(:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_5D_EightByteReal = -1
+
+end function nf90_get_var_5D_EightByteReal
+
+function nf90_get_var_6D_EightByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_6D_EightByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_double), target, dimension(:,:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_6D_EightByteReal = -1
+
+end function nf90_get_var_6D_EightByteReal
+
+function nf90_get_var_7D_EightByteReal(ncid, varid, values, start, count, stride, map)
+
+  use, intrinsic :: iso_c_binding
+
+  implicit none
+
+  integer :: nf90_get_var_7D_EightByteReal
+
+  integer, intent(in) :: ncid, varid
+  real(c_double), target, dimension(:,:,:,:,:,:,:), intent(out) :: values
+  integer, dimension(:), optional, intent(in) :: start, count, stride, map
+
+  nf90_get_var_7D_EightByteReal = -1
+
+end function nf90_get_var_7D_EightByteReal
diff --git a/ext/DUMMY_NETCDF/netcdf_overloads.h90 b/ext/DUMMY_NETCDF/netcdf_overloads.h90
new file mode 100644
index 0000000000000000000000000000000000000000..b4c852530bcde6b17610e2525ec98f49064b3e1d
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf_overloads.h90
@@ -0,0 +1,95 @@
+  ! Overloaded variable functions
+  interface nf90_def_var
+    module procedure nf90_def_var_Scalar, nf90_def_var_oneDim, nf90_def_var_ManyDims
+  end interface ! nf90_def_var
+
+  ! Overloaded attribute functions
+  interface nf90_put_att
+    module procedure nf90_put_att_text,                                      &
+                     nf90_put_att_OneByteInt,     nf90_put_att_TwoByteInt,   &
+                     nf90_put_att_FourByteInt,    nf90_put_att_EightByteInt, &
+                     nf90_put_att_FourByteReal,   nf90_put_att_EightByteReal
+    module procedure nf90_put_att_one_OneByteInt,   nf90_put_att_one_TwoByteInt,   &
+                     nf90_put_att_one_FourByteInt,  nf90_put_att_one_EightByteInt, &
+                     nf90_put_att_one_FourByteReal, nf90_put_att_one_EightByteReal
+  end interface !nf90_put_att
+  interface nf90_get_att
+    module procedure nf90_get_att_text,                                      &
+                     nf90_get_att_OneByteInt,     nf90_get_att_TwoByteInt,   &
+                     nf90_get_att_FourByteInt,    nf90_get_att_EightByteInt, &
+                     nf90_get_att_FourByteReal,   nf90_get_att_EightByteReal
+    module procedure nf90_get_att_one_OneByteInt,   nf90_get_att_one_TwoByteInt,   &
+                     nf90_get_att_one_FourByteInt,  nf90_get_att_one_EightByteInt, &
+                     nf90_get_att_one_FourByteReal, nf90_get_att_one_EightByteReal
+  end interface ! nf90_get_att
+
+  ! Overloaded variable functions
+  interface nf90_put_var
+    module procedure nf90_put_var_text,                                   &
+                     nf90_put_var_OneByteInt, nf90_put_var_TwoByteInt,    &
+                     nf90_put_var_FourByteInt, nf90_put_var_EightByteInt, &
+                     nf90_put_var_FourByteReal, nf90_put_var_EightByteReal
+    module procedure nf90_put_var_1D_text,                                      &
+                     nf90_put_var_1D_OneByteInt, nf90_put_var_1D_TwoByteInt,    &
+                     nf90_put_var_1D_FourByteInt, nf90_put_var_1D_EightByteInt, &
+                     nf90_put_var_1D_FourByteReal, nf90_put_var_1D_EightByteReal
+    module procedure nf90_put_var_2D_text,                                       &
+                     nf90_put_var_2D_OneByteInt, nf90_put_var_2D_TwoByteInt,     &
+                     nf90_put_var_2D_FourByteInt, nf90_put_var_2D_EightByteInt,  &
+                     nf90_put_var_2D_FourByteReal, nf90_put_var_2D_EightByteReal
+    module procedure nf90_put_var_3D_text,                                       &
+                     nf90_put_var_3D_OneByteInt, nf90_put_var_3D_TwoByteInt,     &
+                     nf90_put_var_3D_FourByteInt, nf90_put_var_3D_EightByteInt,  &
+                     nf90_put_var_3D_FourByteReal, nf90_put_var_3D_EightByteReal
+    module procedure nf90_put_var_4D_text,                                       &
+                     nf90_put_var_4D_OneByteInt, nf90_put_var_4D_TwoByteInt,     &
+                     nf90_put_var_4D_FourByteInt, nf90_put_var_4D_EightByteInt,  &
+                     nf90_put_var_4D_FourByteReal, nf90_put_var_4D_EightByteReal
+    module procedure nf90_put_var_5D_text,                                       &
+                     nf90_put_var_5D_OneByteInt, nf90_put_var_5D_TwoByteInt,     &
+                     nf90_put_var_5D_FourByteInt, nf90_put_var_5D_EightByteInt,  &
+                     nf90_put_var_5D_FourByteReal, nf90_put_var_5D_EightByteReal
+    module procedure nf90_put_var_6D_text,                                       &
+                     nf90_put_var_6D_OneByteInt, nf90_put_var_6D_TwoByteInt,     &
+                     nf90_put_var_6D_FourByteInt, nf90_put_var_6D_EightByteInt,  &
+                     nf90_put_var_6D_FourByteReal, nf90_put_var_6D_EightByteReal
+    module procedure nf90_put_var_7D_text,                                       &
+                     nf90_put_var_7D_OneByteInt, nf90_put_var_7D_TwoByteInt,     &
+                     nf90_put_var_7D_FourByteInt, nf90_put_var_7D_EightByteInt,  &
+                     nf90_put_var_7D_FourByteReal, nf90_put_var_7D_EightByteReal
+  end interface ! nf90_put_var
+
+  interface nf90_get_var
+    module procedure nf90_get_var_text,                                   &
+                     nf90_get_var_OneByteInt, nf90_get_var_TwoByteInt,    &
+                     nf90_get_var_FourByteInt, nf90_get_var_EightByteInt, &
+                     nf90_get_var_FourByteReal, nf90_get_var_EightByteReal
+    module procedure nf90_get_var_1D_text,                                      &
+                     nf90_get_var_1D_OneByteInt, nf90_get_var_1D_TwoByteInt,    &
+                     nf90_get_var_1D_FourByteInt, nf90_get_var_1D_EightByteInt, &
+                     nf90_get_var_1D_FourByteReal, nf90_get_var_1D_EightByteReal
+    module procedure nf90_get_var_2D_text,                                      &
+                     nf90_get_var_2D_OneByteInt, nf90_get_var_2D_TwoByteInt,    &
+                     nf90_get_var_2D_FourByteInt, nf90_get_var_2D_EightByteInt, &
+                     nf90_get_var_2D_FourByteReal, nf90_get_var_2D_EightByteReal
+    module procedure nf90_get_var_3D_text,                                      &
+                     nf90_get_var_3D_OneByteInt, nf90_get_var_3D_TwoByteInt,    &
+                     nf90_get_var_3D_FourByteInt, nf90_get_var_3D_EightByteInt, &
+                     nf90_get_var_3D_FourByteReal, nf90_get_var_3D_EightByteReal
+    module procedure nf90_get_var_4D_text,                                      &
+                     nf90_get_var_4D_OneByteInt, nf90_get_var_4D_TwoByteInt,    &
+                     nf90_get_var_4D_FourByteInt, nf90_get_var_4D_EightByteInt, &
+                     nf90_get_var_4D_FourByteReal, nf90_get_var_4D_EightByteReal
+    module procedure nf90_get_var_5D_text,                                      &
+                     nf90_get_var_5D_OneByteInt, nf90_get_var_5D_TwoByteInt,    &
+                     nf90_get_var_5D_FourByteInt, nf90_get_var_5D_EightByteInt, &
+                     nf90_get_var_5D_FourByteReal, nf90_get_var_5D_EightByteReal
+    module procedure nf90_get_var_6D_text,                                      &
+                     nf90_get_var_6D_OneByteInt, nf90_get_var_6D_TwoByteInt,    &
+                     nf90_get_var_6D_FourByteInt, nf90_get_var_6D_EightByteInt, &
+                     nf90_get_var_6D_FourByteReal, nf90_get_var_6D_EightByteReal
+    module procedure nf90_get_var_7D_text,                                      &
+                     nf90_get_var_7D_OneByteInt, nf90_get_var_7D_TwoByteInt,    &
+                     nf90_get_var_7D_FourByteInt, nf90_get_var_7D_EightByteInt, &
+                     nf90_get_var_7D_FourByteReal, nf90_get_var_7D_EightByteReal
+  end interface ! nf90_get_var
diff --git a/ext/DUMMY_NETCDF/netcdf_text_variables.h90 b/ext/DUMMY_NETCDF/netcdf_text_variables.h90
new file mode 100644
index 0000000000000000000000000000000000000000..884c6562b54f480ea30db96afd2870eb99a97bd5
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf_text_variables.h90
@@ -0,0 +1,171 @@
+   function nf90_put_var_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *),             intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_text
+
+     nf90_put_var_text = -1
+   end function nf90_put_var_text
+
+   function nf90_get_var_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *),             intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_get_var_text
+
+     nf90_get_var_text = -1
+   end function nf90_get_var_text
+
+
+   function nf90_put_var_1D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_1D_text
+ 
+     nf90_put_var_1D_text = -1
+   end function nf90_put_var_1D_text
+
+
+   function nf90_put_var_2D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_2D_text
+     
+     nf90_put_var_2D_text = -1
+   end function nf90_put_var_2D_text
+
+
+   function nf90_put_var_3D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_3D_text
+ 
+     nf90_put_var_3D_text = -1
+   end function nf90_put_var_3D_text
+
+
+   function nf90_put_var_4D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_4D_text
+ 
+     nf90_put_var_4D_text = -1
+   end function nf90_put_var_4D_text
+
+
+   function nf90_put_var_5D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_5D_text
+ 
+     nf90_put_var_5D_text = -1
+   end function nf90_put_var_5D_text
+
+
+   function nf90_put_var_6D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_6D_text
+ 
+     nf90_put_var_6D_text = -1
+   end function nf90_put_var_6D_text
+
+
+   function nf90_put_var_7D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :, :, :, :, :, :), &
+                                      intent( in) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_put_var_7D_text
+ 
+     nf90_put_var_7D_text = -1
+   end function nf90_put_var_7D_text
+
+
+   function nf90_get_var_1D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:), &
+                                      intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_get_var_1D_text
+     
+     nf90_get_var_1D_text = -1
+   end function nf90_get_var_1D_text
+
+
+   function nf90_get_var_2D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :), &
+                                      intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_get_var_2D_text
+ 
+     nf90_get_var_2D_text = -1
+   end function nf90_get_var_2D_text
+
+
+   function nf90_get_var_3D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :, :), &
+                                      intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_get_var_3D_text
+ 
+     nf90_get_var_3D_text = -1
+   end function nf90_get_var_3D_text
+
+
+   function nf90_get_var_4D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :, :, :), &
+                                      intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_get_var_4D_text
+ 
+     nf90_get_var_4D_text = -1
+   end function nf90_get_var_4D_text
+
+
+   function nf90_get_var_5D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :, :, :, :), &
+                                      intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_get_var_5D_text
+ 
+     nf90_get_var_5D_text = -1
+   end function nf90_get_var_5D_text
+
+
+   function nf90_get_var_6D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :, :, :, :, :), &
+                                      intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_get_var_6D_text
+ 
+     nf90_get_var_6D_text = -1
+   end function nf90_get_var_6D_text
+
+
+   function nf90_get_var_7D_text(ncid, varid, values, start, count, stride, map)
+     integer,                         intent( in) :: ncid, varid
+     character (len = *), dimension(:, :, :, :, :, :, :), &
+                                      intent(out) :: values
+     integer, dimension(:), optional, intent( in) :: start, count, stride, map
+     integer                                      :: nf90_get_var_7D_text
+ 
+     nf90_get_var_7D_text = -1
+   end function nf90_get_var_7D_text
diff --git a/ext/DUMMY_NETCDF/netcdf_variables.h90 b/ext/DUMMY_NETCDF/netcdf_variables.h90
new file mode 100644
index 0000000000000000000000000000000000000000..003e70f8c2e4e9a3ca831842373fc66e86101abd
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf_variables.h90
@@ -0,0 +1,63 @@
+  ! ----- 
+  ! Variable definitions and inquiry
+  ! ----- 
+  function nf90_def_var_Scalar(ncid, name, xtype, varid)
+    integer,               intent( in) :: ncid
+    character (len = *),   intent( in) :: name
+    integer,               intent( in) :: xtype
+    integer,               intent(out) :: varid
+    integer                            :: nf90_def_var_Scalar
+    
+    nf90_def_var_Scalar = -1
+  end function nf90_def_var_Scalar
+  ! ----- 
+  function nf90_def_var_oneDim(ncid, name, xtype, dimids, varid)
+    integer,               intent( in) :: ncid
+    character (len = *),   intent( in) :: name
+    integer,               intent( in) :: xtype
+    integer,               intent( in) :: dimids
+    integer,               intent(out) :: varid
+    INTEGER                            :: nf90_def_var_oneDim
+    
+    nf90_def_var_oneDim = -1
+  end function nf90_def_var_oneDim
+  ! ----- 
+  function nf90_def_var_ManyDims(ncid, name, xtype, dimids, varid)
+    integer,               intent( in) :: ncid
+    character (len = *),   intent( in) :: name
+    integer,               intent( in) :: xtype
+    integer, dimension(:), intent( in) :: dimids
+    integer,               intent(out) :: varid
+    integer                            :: nf90_def_var_ManyDims
+    
+    nf90_def_var_ManyDims = -1
+  end function nf90_def_var_ManyDims
+  ! ----- 
+  function nf90_inq_varid(ncid, name, varid)
+    integer,             intent( in) :: ncid
+    character (len = *), intent( in) :: name
+    integer,             intent(out) :: varid
+    integer                          :: nf90_inq_varid
+    
+    nf90_inq_varid = -1
+  end function nf90_inq_varid
+  ! ----- 
+  function nf90_inquire_variable(ncid, varid, name, xtype, ndims, dimids, nAtts)
+    integer,                         intent( in) :: ncid, varid
+    character (len = *),   optional, intent(out) :: name
+    integer,               optional, intent(out) :: xtype, ndims 
+    integer, dimension(:), optional, intent(out) :: dimids
+    integer,               optional, intent(out) :: nAtts
+    integer                                      :: nf90_inquire_variable
+    
+    nf90_inquire_variable = -1
+  end function nf90_inquire_variable
+  ! ----- 
+  function nf90_rename_var(ncid, varid, newname)
+    integer,             intent( in) :: ncid, varid
+    character (len = *), intent( in) :: newname
+    integer                          :: nf90_rename_var
+    
+    nf90_rename_var = -1
+  end function nf90_rename_var
+  ! ----- 
diff --git a/ext/DUMMY_NETCDF/netcdf_visibility.h90 b/ext/DUMMY_NETCDF/netcdf_visibility.h90
new file mode 100644
index 0000000000000000000000000000000000000000..819a9a3ea16a9d454a7415d831471c3f5b574dff
--- /dev/null
+++ b/ext/DUMMY_NETCDF/netcdf_visibility.h90
@@ -0,0 +1,25 @@
+  ! Library version, error string
+  public :: nf90_inq_libvers, nf90_strerror
+  
+  ! Control routines 
+  public :: nf90_create, nf90_open, nf90_set_base_pe, nf90_inq_base_pe, &
+            nf90_set_fill, nf90_redef, nf90_enddef,                     &
+            nf90_create_mp, nf90_open_mp,                               &
+            nf90_sync, nf90_abort, nf90_close, nf90_delete
+            
+  ! File level inquiry
+  public :: nf90_inquire, nf90_inq_path, nf90_inq_format
+  
+  ! Dimension routines
+  public :: nf90_def_dim, nf90_inq_dimid, nf90_rename_dim, nf90_inquire_dimension
+  
+  ! attribute routines
+  public :: nf90_copy_att, nf90_rename_att, nf90_del_att, nf90_inq_attname, &
+            nf90_inquire_attribute
+  ! overloaded functions
+  public :: nf90_put_att, nf90_get_att
+  
+  ! Variable routines
+  public :: nf90_def_var, nf90_inq_varid, nf90_rename_var, nf90_inquire_variable 
+  ! overloaded functions
+  public :: nf90_put_var, nf90_get_var
diff --git a/ext/DUMMY_NETCDF/typesizes.F90 b/ext/DUMMY_NETCDF/typesizes.F90
new file mode 100644
index 0000000000000000000000000000000000000000..84c7f4f77f175c22c68b259f0059ea0f3f663c6d
--- /dev/null
+++ b/ext/DUMMY_NETCDF/typesizes.F90
@@ -0,0 +1,65 @@
+! Description:
+!   Provide named kind parameters for use in declarations of real and integer 
+!    variables with specific byte sizes (i.e. one, two, four, and eight byte
+!    integers; four and eight byte reals). The parameters can then be used
+!    in (KIND = XX) modifiers in declarations.
+!   A single function (byteSizesOK()) is provided to ensure that the selected 
+!    kind parameters are correct.
+!  
+! Input Parameters:
+!   None.
+!
+! Output Parameters:
+!   Public parameters, fixed at compile time:
+!     OneByteInt, TwoByteInt, FourByteInt, EightByteInt
+!                                     FourByteReal, EightByteRadl
+!
+! References and Credits:
+!   Written by
+!    Robert Pincus
+!    Cooperative Institue for Meteorological Satellite Studies
+!    University of Wisconsin - Madison
+!    1225 W. Dayton St. 
+!    Madison, Wisconsin 53706
+!    Robert.Pincus@ssec.wisc.edu
+!
+! Design Notes:
+!   Fortran 90 doesn't allow one to check the number of bytes in a real variable;
+!     we check only that four byte and eight byte reals have different kind parameters. 
+!
+module typesizes
+  implicit none
+  public
+  integer, parameter ::   OneByteInt = selected_int_kind(2), &
+                          TwoByteInt = selected_int_kind(4), &
+                         FourByteInt = selected_int_kind(9), &
+                        EightByteInt = selected_int_kind(18)
+
+  integer, parameter ::                                          &
+                        FourByteReal = selected_real_kind(P =  6, R =  37), &
+                       EightByteReal = selected_real_kind(P = 13, R = 307)
+contains
+  logical function byteSizesOK()
+  ! Users may call this function once to ensure that the kind parameters 
+  !   the module defines are available with the current compiler. 
+  ! We can't ensure that the two REAL kinds are actually four and 
+  !   eight bytes long, but we can ensure that they are distinct. 
+  ! Early Fortran 90 compilers would sometimes report incorrect results for 
+  !   the bit_size intrinsic, but I haven't seen this in a long time. 
+
+    ! Local variables
+    integer (kind =  OneByteInt)  :: One
+    integer (kind =  TwoByteInt)  :: Two
+    integer (kind = FourByteInt)  :: Four
+    integer (kind = EightByteInt) :: Eight
+
+    if (bit_size( One) == 8  .and. bit_size( Two)   == 16 .and.  &
+        bit_size(Four) == 32 .and. bit_size( Eight) == 64 .and.  &
+        FourByteReal > 0 .and. EightByteReal > 0 .and. &
+        FourByteReal /= EightByteReal) then
+      byteSizesOK = .true.
+    else
+      byteSizesOK = .false.
+    end if
+  end function byteSizesOK
+end module typeSizes
diff --git a/makenemo b/makenemo
index 68a08ab1a2841988bf02100533850acc69551c04..fc190f8dc0c48b0de503f10485df1c3c0cce9200 100755
--- a/makenemo
+++ b/makenemo
@@ -40,7 +40,6 @@ set -o posix
 # - REF_CONF    : reference configuration to build the new one from
 # - CMP_NAM     : compiler name
 # - NBR_PRC     : number of processes used to compile
-# - RMT_CONF    : unsupported (external) configuration to build the new one from
 # - NEM_SUBDIR  : NEMO subdirectory used (specified)
 #
 #  Locally defined :
@@ -87,6 +86,8 @@ set -o posix
 x_d=''; x_h=''; x_n=''; x_r=''; x_c='';
 x_u=''; x_a=''; x_m=''; x_t=''; x_b='';
 x_j='1'; x_e='none'; x_s='src'; x_v='1'
+x_nocdf=0
+x_name=''
 
 ##- Local variables ---
 b_n=$(basename ${0})
@@ -95,15 +96,19 @@ MAIN_DIR=$(cd $(dirname "$0"); pwd)
 MAIN_DIR=${MAIN_DIR%/sette*}
 MAIN_DIR=${MAIN_DIR%/tools*}
 MAIN_DIR=${MAIN_DIR%/cfgs*}
+MAIN_DIR=${MAIN_DIR%/tests*}
+MAIN_DIR=${MAIN_DIR%/ext*}
+MAIN_DIR=${MAIN_DIR%/arch*}
 export MAIN_DIR
 #
 export CONFIG_DIR=${MAIN_DIR}/cfgs
+export TESTS_DIR=${MAIN_DIR}/tests
 export TOOLS_DIR=${MAIN_DIR}/tools
 export COMPIL_DIR=${MAIN_DIR}/mk
 export NEMO_DIR=${MAIN_DIR}/${x_s}
 export AGRIFUSE='10'
 list_key='0'; chk_key='1'
-list_add_key=''; list_del_key='';
+list_add_key=''; list_def_key=''; list_del_key=''
 conf_file=ref_cfgs.txt
 #-
 #- FCM and functions location ---
@@ -111,74 +116,120 @@ export PATH=${MAIN_DIR}/ext/FCM/bin:$PATH
 
 #-
 #- Choice of the options ---
-while getopts :hd:n:r:u:a:m:j:e:s:v:t:k:b option; do
-
-	case $option in
-		('h') cat <<EOF
+## Get clean, clean_config options
+while [ ${#1} -gt 0 ]; do
+    
+    case "$1" in
+	-h|--help) cat <<EOF
 Usage:
 ------
-./makenemo -[aru] CONFIG -m ARCH [-[dehjntv] ...] [{list_key,clean,clean_config}]
-                                                  [{add_key,del_key} ...]
+./makenemo -[arn] CONFIG -m ARCH [-[...] ...] [{list_key,clean,clean_config}]
 
 Mandatory
-   -m    Computing architecture (./arch), FCM file describing the compilation settings
+   -m, --mach, --machine, --arch <machine_name>
+            Computing architecture, will use the file arch_<machine_name>.fcm located in ./arch (sub)directory(ies)
 
-   and one of the following option (use 'all' arg to list available items)
+   -n, --name <config_name>
+            Name of the configuration to compile
 
-   -r    Reference configuration (./cfgs), proven with long-term support
-   -a    Academic test case (./tests), ready-to-use configuration with no support over time
-   -u    Scripted remote configuration (see ./tests/rmt_cfgs.txt)
+ and, if -n defines a new configuration, one of the following option (use 'all' arg to list available items):
+
+   -r, --ref <ref_config_name>  
+            To specify which reference configuration (./cfgs) must be used to buit the new configuration
+   -a, --test <test_config_name>  
+            To specify which academic test case (./tests) must be used to buit the new configuration
 
 Optional
-   -d    New set of sub-components (subfolders from ./src directory)
-   -b    Compile Nemo in debug mode (if %DEBUG_FCFLAGS is defined in arch file)
-   -e    Path for alter patch  location (default: 'MY_SRC' in configuration folder)
-   -h    Print this help
-   -j    Number of processes to compile (0: dry run with no build)
-   -n    Name for new configuration
-   -s    Path for alter source location (default: 'src' root directory)
-   -t    Path for alter build  location (default: 'BLD' in configuration folder)
-   -v    Level of verbosity ([0-3])
+   --add_key, key_add, add_key "<list of keys>"
+            list of cpp keys to be added in cpp_<config_name>.fcm file
+   -b, --dbg, --debug    
+            add it to compile in debug mode
+   -d, --dirs, --comp <sub-components>  
+            New set of sub-components (subfolders from ./src directory) to be used
+   --def_key, key_def, def_key "<list of keys>"
+            list of all cpp keys to be defined in cpp_<config_name>.fcm file
+   --del_key, key_del, del_key "<list of keys>"
+            list of cpp keys to be deleted in cpp_<config_name>.fcm file
+   -e, --my_srcpath, --my_src_path, --MY_SRCpath, --MY_SRC_path <path>  
+            Path for alter patch location (default: 'MY_SRC' in configuration folder)
+   -h, --help
+            Print this help
+   -j, --jobs <nb_job>
+            Number of processes to compile (0: dry run with no build)
+   -k, --chkkey <O/1>
+            Set to 0 to bypass the check of the cpp keys (takes time at the beginning of makenemo).
+            Default is 1
+   --nonc, --nocdf, --nonetcdf, --no_nc, --no_cdf, --no_netcdf 
+            Compile without the NetCDF Library
+   -s, --srcpath, --src_path  <path>   
+            Path for alter source location (default: 'src' root directory)
+   -t, --bldpath, --bld_path, --BLDpath, --BLD_path <path>   
+            Path for alter build  location (default: 'BLD' in configuration folder)
+   -v, --verbose <0/1/2/3>
+            Level of verbosity ([0-3])
 
 Examples
    ¤ Configuration creation
-        Build          : ./makenemo         -[aru] ... [...]
-        Copy           : ./makenemo -n ...  -[aru] ... [...]
+        Build          : ./makenemo         -[ar] ... [...]
+        Copy           : ./makenemo -n ...  -[ar] ... [...]
    ¤ Configuration management
         List CPP keys  : ./makenemo -n ... list_key
         Add-Remove keys: ./makenemo -n ... add_key '...' del_key '...'
         Fresh start    : ./makenemo -n ... clean
         Removal        : ./makenemo -n ... clean_config
-EOF
-				exit 0       ;;
-		('b') x_b="True"   ;;   ('n') x_n=${OPTARG};; ('r') x_r=${OPTARG};; ('u') x_u=${OPTARG};;
-		('a') x_a=${OPTARG};;   ('m') x_m=${OPTARG};; ('j') x_j=${OPTARG};; ('t') x_t=${OPTARG};;
-		('e') x_e=(${OPTARG});; ('s') x_s=${OPTARG};; ('v') x_v=${OPTARG};; ('d') x_d=${OPTARG};;
-		('k') chk_key=${OPTARG}                                                                ;;
-		(':') echo ${b_n}" : -"${OPTARG}" option : missing value" 1>&2;	exit 2                 ;;
-		('?') echo ${b_n}" : -"${OPTARG}" option : not supported" 1>&2;	exit 2                 ;;
-	esac
-
-done
-
-shift $(($OPTIND-1));
-
-## Get clean, clean_config options
-while [ ${#1} -gt 0 ]; do
 
-	case "$1" in
-		'clean'       ) x_c="--$1"                                     ;;
-		'clean_config') . ${COMPIL_DIR}/Fclean_config.sh; exit         ;;
-		## Checking if argument has anything other than whitespace
-		'add_key'     ) [[ ! "$2" =~ ^\ +$ ]] && list_add_key=$2; shift;;
-		'del_key'     ) [[ ! "$2" =~ ^\ +$ ]] && list_del_key=$2; shift;;
-		'list_key'    ) list_key='1'                                   ;;
-		'*'           ) echo " \"$1\" BAD OPTION"; exit 2              ;;
-	esac
-
-	shift
+EOF
+	    exit 0       ;;
+	-b|--dbg|--debug)
+	    x_b="True" ;;
+	-d|--dirs|--comp)
+	    x_d=${2} ; shift ;;
+	-n|--name)
+	    x_name=${2} ; shift ;;
+	-r|--ref)
+	    x_r=${2} ; shift ;;
+	-a|--academic|--test)
+	    x_a=${2} ; shift ;;
+	-m|--mach|--machine|--arch)
+	    x_m=${2} ; shift ;;
+	-j) x_j=${2} ; shift ;;
+	-t|--bldpath|--bld_path|--BLDpath|--BLD_path)
+	    x_t=${2} ; shift ;;
+	-e|--my_srcpath|--my_src_path|--MY_SRCpath|--MY_SRC_path)
+	    x_e=${2} ; shift ;;
+	-s|--srcpath|--src_path)
+	    x_s=${2} ; shift ;;
+	-v|--verbose)
+	    x_v=${2} ; shift ;;
+	-k|--chkkey)
+	    chk_key=${2} ; shift ;;
+	--nonc|--nocdf|--nonetcdf|--no_nc|--no_cdf|--no_netcdf)
+	    x_nocdf=1  ;;
+	--clean|clean)
+	    x_c="--$1"  ;;
+	--clean_config|clean_config)
+	    . ${COMPIL_DIR}/Fclean_config.sh; exit   ;;
+	## Checking if argument has anything other than whitespace
+	--add_key|--key_add|add_key     ) [[ ! "$2" =~ ^\ +$ ]] && list_add_key=$2; shift;;
+	--def_key|--key_def|def_key     ) [[ ! "$2" =~ ^\ +$ ]] && list_def_key=$2; shift;;
+	--del_key|--key_del|del_key     ) [[ ! "$2" =~ ^\ +$ ]] && list_del_key=$2; shift;;
+	--list_key|list_key   ) list_key='1'                                   ;;
+	'*'           ) echo " \"$1\" BAD OPTION"; exit 2              ;;
+	':') echo ${b_n}" : -"${1}" option : missing value" 1>&2;	exit 2             ;;
+	'?') echo ${b_n}" : -"${1}" option : not supported" 1>&2;	exit 2             ;;
+    esac
+    
+    shift
 done
 
+if [ -n "$x_name" ]   # is the configuration existing in cfgs or tests? or is it a new conf?
+then
+    incfg=$( find $CONFIG_DIR -type d -name $x_name | wc -l )   # this configuration exists in CONFIG_DIR
+    intst=$( find $TESTS_DIR  -type d -name $x_name | wc -l )   # this configuration exists in TESTS_DIR
+    [[ $incfg -eq 0 && $intst -eq 0 ]] && x_n=$x_name   # this is a new configuration       -> dedine/overwrite x_n
+    [[ $incfg -eq 1 &&    -z "$x_r" ]] && x_r=$x_name   # this is a reference configuration -> dedine/overwrite x_r
+    [[ $intst -eq 1 &&    -z "$x_a" ]] && x_a=$x_name   # this is a test configuration      -> dedine/overwrite x_a
+fi
 
 export NEW_CONF=${x_n}
 NBR_PRC=${x_j}
@@ -186,7 +237,6 @@ CMP_NAM=${x_m}
 NEM_SUBDIR=${x_d}
 REF_CONF=${x_r}
 DEMO_CONF=${x_a}
-RMT_CONF=${x_u}
 TML_CONF=${REF_CONF}
 export NEMO_DIR=${MAIN_DIR}/${x_s}
 NEMO_DBG=${x_b}
@@ -195,14 +245,14 @@ NEMO_DBG=${x_b}
 
 
 ## No ref. cfg, demo case, nor remote cfg selected
-if [[ -z "${REF_CONF}" && -z "${DEMO_CONF}" && -z "${RMT_CONF}" ]]; then
+if [[ -z "${REF_CONF}" && -z "${DEMO_CONF}" ]]; then
 
 		## Reuse last configuration compiled if any (existing 'work_cfgs.txt')
 #		if [[ $( find ./cfgs ./tests -name work_cfgs.txt ) ]]; then
 #			CONFIG_DIR=${MAIN_DIR}/$( ls -rt */work_cfgs.txt | awk -F/ 'END{ print $1}' )
 #			TML_CONF=$( tail -1 ${CONFIG_DIR}/work_cfgs.txt | awk '{ print $1 }' )
 #		else
-			## No ${REF_CONF}, ${DEMO_CONF}, ${RMT_CONF} nor ${NEM_SUBDIR} and 1st compilation => exit
+			## No ${REF_CONF}, ${DEMO_CONF} nor ${NEM_SUBDIR} and 1st compilation => exit
 #			echo -e "\033[0;33m\nNo previous build found!"
 			echo -e "\033[0;31m\nAt least a reference configuration ('-r'), a test case ('-a'), "
 			echo -e "a remote configuration ('-u') has to be choosen!!!\033[0m"
@@ -214,7 +264,7 @@ if [[ -z "${REF_CONF}" && -z "${DEMO_CONF}" && -z "${RMT_CONF}" ]]; then
 else
 
 	## 'all' arg: list all available configurations
-	if [[ "${REF_CONF}" == 'all' || "${DEMO_CONF}" == 'all' || "${RMT_CONF}" == 'all' ]]; then
+	if [[ "${REF_CONF}" == 'all' || "${DEMO_CONF}" == 'all' ]]; then
 		${COMPIL_DIR}/Flist_cfgs.sh
 		exit 2
    ## Probably useless but who knows?
@@ -225,27 +275,8 @@ else
 		exit 2
 	fi
 
-	## Remote cfg
-	if   [ -n "${RMT_CONF}" ]; then
-		conf_file=rmt_cfgs.txt; CONFIG_DIR=${MAIN_DIR}/tests;
-
-		if [[ ! $( grep ${RMT_CONF} ${CONFIG_DIR}/${conf_file} ) ]]; then
-				echo -e "\033[0;31m\nThe reference configuration ('-r'), test case ('-a') or "
-				echo -e "remote configuration ('-u') selected is not available!!!"
-				echo -e "Check the option used and the available items in .txt files\033[0m"
-				${COMPIL_DIR}/Flist_cfgs.sh
-				exit 2
-		fi
-
-		## Little tricky this one
-		for word in $( grep ${RMT_CONF} ${CONFIG_DIR}/${conf_file} ); do
-			words[${#words[@]}]=$word
-		done
-
-		TML_CONF=${words[2]}; NEM_SUBDIR=${words[4]}; URL=${words[6]}
-
 	## Demo case
-	elif [ -n "${DEMO_CONF}" ]; then
+	if [ -n "${DEMO_CONF}" ]; then
 		conf_file=demo_cfgs.txt; CONFIG_DIR=${MAIN_DIR}/tests; TML_CONF=${DEMO_CONF}
 	fi
 
@@ -281,13 +312,17 @@ export NEM_SUBDIR="${NEM_SUBDIR}" NEW_CONF="${NEW_CONF}"
 
 ## Save new configuration with sub-components set in work_cfgs.txt
 [ -f ${CONFIG_DIR}/work_cfgs.txt ] && sed -i "/${NEW_CONF} /d" ${CONFIG_DIR}/work_cfgs.txt
-echo ${NEW_CONF} "${NEM_SUBDIR}" \
-	>> ${CONFIG_DIR}/work_cfgs.txt
+echo ${NEW_CONF} "${NEM_SUBDIR}" >> ${CONFIG_DIR}/work_cfgs.txt
 
 cd ${CONFIG_DIR}
 
-printf "\nYou are installing a new configuration %s from %s " ${NEW_CONF} ${TML_CONF}
-printf  "with sub-components: %s\n"  "${NEM_SUBDIR}"
+if [ -n "${NEW_CONF}" ]
+then
+    echo
+    printf "\nYou are installing a new configuration %s from %s " ${NEW_CONF} ${TML_CONF}
+    printf  "with sub-components: %s\n"  "${NEM_SUBDIR}"
+    echo
+fi
 
 ## Create new config even in existing one (mkdir with -p option, cp with -n)
 ${COMPIL_DIR}/Fmake_config.sh ${NEW_CONF} ${TML_CONF}
@@ -295,9 +330,6 @@ ${COMPIL_DIR}/Fmake_config.sh ${NEW_CONF} ${TML_CONF}
 ## create EXP00 if needed
 [ ! -d ${CONFIG_DIR}/${NEW_CONF}/EXP00 ] && \cp -R -n ${CONFIG_DIR}/${NEW_CONF}/EXPREF ${CONFIG_DIR}/${NEW_CONF}/EXP00
 
-## Get online script file for remote cfg
-[ -n "${RMT_CONF}" ] && ${COMPIL_DIR}/Ffetch_extdir.sh ${NEW_CONF} $URL
-
 #- Create the WORK ---
 #- Clean links and librairies ---
 #- Creating the good links, at first on OCE ---
@@ -319,6 +351,7 @@ fi
 
 #- At this stage new configuration has been added, we add or remove keys
 [ ! -z "${list_add_key}" ] && { . ${COMPIL_DIR}/Fadd_keys.sh ${NEW_CONF} add_key ${list_add_key}; }
+[ ! -z "${list_def_key}" ] && { . ${COMPIL_DIR}/Fdef_keys.sh ${NEW_CONF} def_key ${list_def_key}; }
 [ ! -z "${list_del_key}" ] && { . ${COMPIL_DIR}/Fdel_keys.sh ${NEW_CONF} del_key ${list_del_key}; }
 
 #- check that all keys are really existing...
@@ -349,7 +382,7 @@ fi
 
 #- At this stage the configuration has beeen chosen
 #- We coose the default light file
-export USEBLD=bldxag.cfg
+[ $x_nocdf -eq 1 ] && export USEBLD=bldxagxcdf.cfg || export USEBLD=bldxag.cfg
 
 #- We look after agrif
 grep key_agrif ${COMPIL_DIR}/cpp.fcm && export AGRIFUSE=1 && export USEBLD=${USEBLD/xag/}
@@ -386,7 +419,7 @@ if [ "${NBR_PRC}" -gt 0 ]; then
 
 		echo 'Cleaning in '${NEW_CONF}' the building folders'
 
-      for dir in AGRIFLIB BLD EXP00 LONG NEMOFILES REPRO_* SHORT WORK; do
+      for dir in AGRIFLIB BLD LONG NEMOFILES REPRO_* SHORT WORK; do
          rm -rf ${NEMO_TDIR}/${NEW_CONF}/$dir
       done
 
diff --git a/mk/Fcheck_archfile.sh b/mk/Fcheck_archfile.sh
index 92ee4b63d185c6aede93f5da2ee881811b236394..b614513246e1a8ac8f7986a1ef5156f27c92d67e 100755
--- a/mk/Fcheck_archfile.sh
+++ b/mk/Fcheck_archfile.sh
@@ -216,14 +216,14 @@ done
 
 # Nemo debug ?
 if [ -n "${NEMO_DBG}" ]; then
-    if [ $( grep -c "^%DEBUG_FCFLAGS" ${COMPIL_DIR}/$1 ) -eq 0 ]; then
+    if (! grep -q "^%DEBUG_FCFLAGS" ${COMPIL_DIR}/$1 ); then
        echo "ERROR: You must defined '%DEBUG_FCFLAGS' in your arch file if you want to compile Nemo in debug mode using '-d' option"
        exit 1
     fi
     # duplicate the lines starting with %DEBUG_XXX and replace, in the duplicated line, %DEBUG_XXX by %XXX
     sed -i "/^%DEBUG_/{p;s/^%DEBUG_\([^ ]*\)/%\1/;}" ${COMPIL_DIR}/$1
 else
-    if [ $( grep -q "^%PROD_FCFLAGS" ${COMPIL_DIR}/$1 ) -eq 0 ]; then
+    if (! grep -q "^%PROD_FCFLAGS" ${COMPIL_DIR}/$1 ); then
         echo "WARNING: '%PROD_FCFLAGS' not defined in your arch file, makenemo will use '%FCFLAGS' instead"
     fi
     # duplicate the lines starting with %PROD_XXX and replace, in the duplicated line, %PROD_XXX by %XXX
diff --git a/mk/Ffetch_extdir.sh b/mk/Ffetch_extdir.sh
deleted file mode 100755
index 9726a5f4045c9fe2453f4d9288b2e7256ceaa914..0000000000000000000000000000000000000000
--- a/mk/Ffetch_extdir.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/bash
-#set -x
-set -o posix
-#set -u
-#set -e
-#+
-# ===============
-# Ffetch_extdir.sh
-# ===============
-# ---------------
-# Make the config 
-# ---------------
-# SYNOPSIS
-# ========
-# ::
-#  $ Ffetch_extdir.sh
-# DESCRIPTION
-# ===========
-# - Make the config directory 
-# - Create repositories needed :
-#  
-#  - EXP00 for namelist
-#  - MY_SRC for user sources
-#  - BLD for compilation 
-# EXAMPLES
-# ========
-# ::
-#  $ ./Ffetch_extdir.sh CONFIG_NAME REMOTE_CTL 
-# TODO
-# ====
-# option debug
-# EVOLUTIONS
-# ==========
-# $Id: Ffetch_extdir.sh 3715 2012-11-28 16:06:02Z acc $
-#   * creation
-#-
-basedir=$(pwd)
-cd ${1}
-wget ${2} -O remote_file.list
-#
-if [ -f remote_file.list ] ; then
- cat remote_file.list | grep -v '^#' |
-  while
-   read remfile locfile
-   do
-    if [ $remfile == 'create_directory' ] ;then
-      mkdir $locfile
-    else
-      wget $remfile -O $locfile
-    fi
-   done
-fi
-cd $basedir
diff --git a/mk/bldxag.cfg b/mk/bldxag.cfg
index 19ea847577665a653b1db9b57c60ec2ef623e33b..56b707aaae4efaa19fc210bd83c4e77d914ee553 100644
--- a/mk/bldxag.cfg
+++ b/mk/bldxag.cfg
@@ -14,7 +14,6 @@ search_src           1
 
 src::ioipsl               $MAIN_DIR/ext/IOIPSL/src
 src::nemo                 $CONFIG_DIR/$NEW_CONF/WORK
-src::ppr_1d               $MAIN_DIR/ext/PPR/src
 
 bld::target nemo.exe
 bld::exe_dep
@@ -36,10 +35,8 @@ bld::tool::make      %MK
 # Pre-process code before analysing dependencies
 bld::pp::ioipsl   1
 bld::pp::nemo     1
-bld::pp::ppr_1d   1
 bld::tool::fppflags::nemo     %FPPFLAGS
 bld::tool::fppflags::ioipsl   %FPPFLAGS
-bld::tool::fppflags::ppr_1d   %FPPFLAGS
 
 # Ignore the following dependencies
 bld::excl_dep        inc::netcdf.inc
diff --git a/mk/bldxagxcdf.cfg b/mk/bldxagxcdf.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..c3e85802ea35d1866e1dbf58228f1e4c1c985d7d
--- /dev/null
+++ b/mk/bldxagxcdf.cfg
@@ -0,0 +1,66 @@
+# ----------------------- FCM extract configuration file -----------------------
+cfg::type                           bld
+cfg::version                        1.0
+
+
+# ------------------------------------------------------------------------------
+# Build information
+# ------------------------------------------------------------------------------
+
+inc $COMPIL_DIR/arch_nemo.fcm
+inc $COMPIL_DIR/cpp.fcm
+
+search_src           1
+
+src::nocdf                $MAIN_DIR/ext/DUMMY_NETCDF
+src::ioipsl               $MAIN_DIR/ext/IOIPSL/src
+src::nemo                 $CONFIG_DIR/$NEW_CONF/WORK
+
+bld::target nemo.exe
+bld::exe_dep
+
+
+dir::root            $NEMO_TDIR/$NEW_CONF/BLD
+
+
+bld::tool::cpp       %CPP
+bld::tool::fpp       %CPP
+bld::tool::fc        %FC 
+bld::tool::fflags    %FCFLAGS %USER_INC
+bld::tool::ld        %LD
+bld::tool::ldflags   %LDFLAGS %USER_LIB
+bld::tool::ar        %AR
+bld::tool::arflags   %ARFLAGS
+bld::tool::make      %MK
+
+# Pre-process code before analysing dependencies
+bld::pp::nocdf    1
+bld::pp::ioipsl   1
+bld::pp::nemo     1
+bld::tool::fppflags::nemo     %FPPFLAGS
+bld::tool::fppflags::nocdf    %FPPFLAGS
+bld::tool::fppflags::ioipsl   %FPPFLAGS
+
+# Ignore the following dependencies
+bld::excl_dep        inc::VT.inc
+bld::excl_dep        use::xios
+bld::excl_dep        h::mpif.h
+bld::excl_dep        inc::mpif.h
+bld::excl_dep        inc::mpe_logf.h
+bld::excl_dep        use::mpi
+bld::excl_dep        use::mod_oasis
+bld::excl_dep        use::mkl_dfti
+bld::excl_dep        use::cudafor
+bld::excl_dep        use::openacc
+# Don't generate interface files
+bld::tool::geninterface none
+
+# Allow ".h90" as an extension for CPP include files
+bld::infile_ext::h90  CPP::INCLUDE
+
+# extension for module output
+bld::outfile_ext::mod .mod
+
+# rename executable to nemo.exe
+bld::exe_name::model  nemo.exe
+
diff --git a/mk/bldxcdf.cfg b/mk/bldxcdf.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..0d752da9de872d551d4ce56322074c3e0d02ddd1
--- /dev/null
+++ b/mk/bldxcdf.cfg
@@ -0,0 +1,74 @@
+# ----------------------- FCM extract configuration file -----------------------
+cfg::type                           bld
+cfg::version                        1.0
+
+
+# ------------------------------------------------------------------------------
+# Build information
+# ------------------------------------------------------------------------------
+
+inc $COMPIL_DIR/arch_nemo.fcm
+inc $COMPIL_DIR/cpp.fcm
+
+search_src           1
+
+src::nocdf                $MAIN_DIR/ext/DUMMY_NETCDF
+src::ioipsl               $MAIN_DIR/ext/IOIPSL/src
+src::agrif                $MAIN_DIR/ext/AGRIF/AGRIF_FILES
+src::nemo                 $CONFIG_DIR/$NEW_CONF/NEMOFILES/obj
+src::ppr_1d               $MAIN_DIR/ext/PPR/src
+
+
+bld::target  nemo.exe
+bld::exe_dep
+
+
+dir::root            $NEMO_TDIR/$NEW_CONF/BLD
+
+
+bld::tool::cpp       %CPP
+bld::tool::fpp       %CPP
+bld::tool::fc        %FC 
+bld::tool::fflags    %FCFLAGS %USER_INC
+bld::tool::fflags::agrif   %FFLAGS %USER_INC
+bld::tool::ld        %LD
+bld::tool::ldflags   %LDFLAGS %USER_LIB
+bld::tool::ar        %AR
+bld::tool::arflags   %ARFLAGS
+bld::tool::make      %MK
+
+# Pre-process code before analysing dependencies
+bld::pp::nocdf    1
+bld::pp::ioipsl   1
+bld::pp::nemo     1
+bld::pp::agrif    1
+bld::pp::ppr_1d   1
+bld::tool::fppflags::nemo      %FPPFLAGS -I$CONFIG_DIR/$NEW_CONF/NEMOFILES/inc
+bld::tool::fppflags::nocdf     %FPPFLAGS
+bld::tool::fppflags::ioipsl    %FPPFLAGS
+bld::tool::fppflags::agrif     %FPPFLAGS -include ${MAIN_DIR}/ext/AGRIF/nemo_mpi.h
+bld::tool::fppflags::ppr_1d    %FPPFLAGS
+
+# Ignore the following dependencies
+bld::excl_dep        inc::VT.inc
+bld::excl_dep        use::xios
+bld::excl_dep        h::mpif.h
+bld::excl_dep        inc::mpif.h
+bld::excl_dep        inc::mpe_logf.h
+bld::excl_dep        use::mpi
+bld::excl_dep        use::mod_oasis
+bld::excl_dep        use::mkl_dfti
+bld::excl_dep        use::cudafor
+bld::excl_dep        use::openacc
+# Don't generate interface files
+bld::tool::geninterface none
+
+# Allow ".h90" as an extension for CPP include files
+bld::infile_ext::h90  CPP::INCLUDE
+bld::infile_ext::f90  FPP::FPP9X::SOURCE
+
+# extension for module output
+bld::outfile_ext::mod .mod
+
+# rename executable to nemo.exe
+bld::exe_name::model  nemo.exe
diff --git a/tests/BENCH/EXPREF/namelist_cfg_orca025_like b/tests/BENCH/EXPREF/namelist_cfg_orca025_like
index c7c25cae2c209d63b926b7cccba50ad415961cb1..76256b5ccf6a5d9e5875d66895ebee2dab20e1d0 100644
--- a/tests/BENCH/EXPREF/namelist_cfg_orca025_like
+++ b/tests/BENCH/EXPREF/namelist_cfg_orca025_like
@@ -37,8 +37,9 @@
 !-----------------------------------------------------------------------
 &namdom        !   time and space domain
 !-----------------------------------------------------------------------
-   rn_Dt      =    900.   !  time step for the dynamics (and tracer if nn_acc=0)
+   rn_Dt      =     90.    !  time step for the dynamics (and tracer if nn_acc=0)
    rn_atfp     =   0.05    !  asselin time filter parameter
+   ln_meshmask = .false.   !  =T create a mesh file
 /
 
 !!======================================================================
diff --git a/tests/BENCH/EXPREF/namelist_cfg_orca12_like b/tests/BENCH/EXPREF/namelist_cfg_orca12_like
index ee0ae6c9dd7ac450104a769340b43493404a689d..131f5be6c6db843cfb61180c7dea4550dbae914f 100644
--- a/tests/BENCH/EXPREF/namelist_cfg_orca12_like
+++ b/tests/BENCH/EXPREF/namelist_cfg_orca12_like
@@ -37,8 +37,9 @@
 !-----------------------------------------------------------------------
 &namdom        !   time and space domain
 !-----------------------------------------------------------------------
-   rn_Dt      =    300.   !  time step for the dynamics (and tracer if nn_acc=0)
+   rn_Dt      =     30.    !  time step for the dynamics (and tracer if nn_acc=0)
    rn_atfp     =   0.05    !  asselin time filter parameter
+   ln_meshmask = .false.   !  =T create a mesh file
 /
 
 !!======================================================================
diff --git a/tests/BENCH/EXPREF/namelist_cfg_orca1_like b/tests/BENCH/EXPREF/namelist_cfg_orca1_like
index c88cfc9a43f5bd4240a25bf6b131cf6af70cdaf8..0513cc17660fcd7ee2c9fb63d2e6bb7dd86046ab 100644
--- a/tests/BENCH/EXPREF/namelist_cfg_orca1_like
+++ b/tests/BENCH/EXPREF/namelist_cfg_orca1_like
@@ -37,8 +37,9 @@
 !-----------------------------------------------------------------------
 &namdom        !   time and space domain
 !-----------------------------------------------------------------------
-   rn_Dt      =   3600.   !  time step for the dynamics (and tracer if nn_acc=0)
+   rn_Dt      =    360.    !  time step for the dynamics (and tracer if nn_acc=0)
    rn_atfp     =   0.05    !  asselin time filter parameter
+   ln_meshmask = .false.   !  =T create a mesh file
 /
 
 !!======================================================================