diff --git a/flexpart_code/fpmetbinary_mod.F90 b/flexpart_code/fpmetbinary_mod.F90
index eb881f85c6e372e7c0d947f0d4d7fef82633fb3e..7620437a1ee7babdf07f6b2b930e845d15e8cc7b 100644
--- a/flexpart_code/fpmetbinary_mod.F90
+++ b/flexpart_code/fpmetbinary_mod.F90
@@ -111,19 +111,8 @@ CONTAINS
 &                              ncid)
 
 
-#ifdef RAWBIN
-        OPEN(IOUNIT_DUMP, file=filename, action='WRITE', status='REPLACE', form="unformatted", access="stream")
-#endif
 
-
-
-
-
-        CALL fpio(IOUNIT_DUMP, ncid, 'DUMP', cm_index)
-
-#ifdef RAWBIN
-        CLOSE(IOUNIT_DUMP)
-#endif
+        CALL fpio(ncid, 'DUMP', cm_index)
 
         PRINT *, 'Closing NC4 file...'
         ncretval = nf90_close(ncid)
@@ -152,175 +141,18 @@ PRINT *, "Opening nc file for reading: ", filename
 PRINT *, 'OPENED NC4 FILE FOR READING...'
 
 
-
-#ifdef RAWBIN
-        OPEN(IOUNIT_LOAD, file=filename, action='READ', status='OLD', form="unformatted", access="stream")
-#endif
-
-        CALL fpio(IOUNIT_LOAD, ncid, 'LOAD', cm_index)
-
-#ifdef RAWBIN
-        CLOSE(IOUNIT_LOAD)
-#endif
-
+        CALL fpio(ncid, 'LOAD', cm_index)
 
         CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
         !PRINT *, 'Load walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
     END SUBROUTINE fpmetbinary_load
 
-    SUBROUTINE fpmetbinary_zero(cm_index)
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
 
 
-        ! Zeroes out, in local datastructures, the values dumped/loaded
-        ! This was written primarily as a testing mechanism.
-        ! DJM -- 17 February 2017 -- I don't think this routine has been used
-        ! for anything in recent past.  Might want to consider 86'ing it.
-        ! The lines here correspond to READ and WRITE in the dump/load routines
-
-        ! Scalar values
-        nx=0.0; ny=0.0; nxmin1=0.0; nymin1=0.0; nxfield=0.0
-        nuvz=0.0; nwz=0.0; nz=0.0; nmixz=0.0; nlev_ec=0.0
-        dx=0.0; dy=0.0; xlon0=0.0; ylat0=0.0; dxconst=0.0; dyconst=0.0
-
-        ! Fixed fields, static in time
-        oro=0.0; excessoro=0.0; lsm=0.0; xlanduse=0.0; height=0.0
-
-        ! 3d fields
-        uu(:,:,:,cm_index) = 0.0
-        vv(:,:,:,cm_index) = 0.0
-        uupol(:,:,:,cm_index) = 0.0
-        vvpol(:,:,:,cm_index) = 0.0
-        ww(:,:,:,cm_index) = 0.0
-        tt(:,:,:,cm_index) = 0.0
-        qv(:,:,:,cm_index) = 0.0
-        pv(:,:,:,cm_index) = 0.0
-        rho(:,:,:,cm_index) = 0.0
-        drhodz(:,:,:,cm_index) = 0.0
-        tth(:,:,:,cm_index) = 0.0
-        qvh(:,:,:,cm_index) = 0.0
-        pplev(:,:,:,cm_index) = 0.0
-        clouds(:,:,:,cm_index) = 0.0
-        cloudsh(:,:,cm_index) = 0.0
-
-        ! 2d fields
-        ps(:,:,:,cm_index) = 0.0
-        sd(:,:,:,cm_index) = 0.0
-        msl(:,:,:,cm_index) = 0.0
-        tcc(:,:,:,cm_index) = 0.0
-        u10(:,:,:,cm_index) = 0.0
-        v10(:,:,:,cm_index) = 0.0
-        tt2(:,:,:,cm_index) = 0.0
-        td2(:,:,:,cm_index) = 0.0
-        lsprec(:,:,:,cm_index) = 0.0
-        convprec(:,:,:,cm_index) = 0.0
-        sshf(:,:,:,cm_index) = 0.0
-        ssr(:,:,:,cm_index) = 0.0
-        surfstr(:,:,:,cm_index) = 0.0
-        ustar(:,:,:,cm_index) = 0.0
-        wstar(:,:,:,cm_index) = 0.0
-        hmix(:,:,:,cm_index) = 0.0
-        tropopause(:,:,:,cm_index) = 0.0
-        oli(:,:,:,cm_index) = 0.0
-        diffk(:,:,:,cm_index) = 0.0
-        vdep(:,:,:,cm_index) = 0.0
-
-        ! 1d fields
-        z0(:) = 0.0
-        akm(:) = 0.0
-        bkm(:) = 0.0
-        akz(:) = 0.0
-        bkz(:) = 0.0
-        aknew(:) = 0.0
-        bknew(:) = 0.0
-
-        ! Nested, scalar values (for each nest)
-        nxn(:) = 0.0
-        nyn(:) = 0.0
-        dxn(:) = 0.0
-        dyn(:) = 0.0
-        xlon0n(:) = 0.0
-        ylat0n(:) = 0.0
-
-        ! Nested fields, static in time
-        oron=0.0; excessoron=0.0; lsmn=0.0; xlandusen=0.0
-
-        ! 3d nested fields
-        uun(:,:,:,cm_index,:) = 0.0
-        wwn(:,:,:,cm_index,:) = 0.0
-        ttn(:,:,:,cm_index,:) = 0.0
-        qvn(:,:,:,cm_index,:) = 0.0
-        pvn(:,:,:,cm_index,:) = 0.0
-        cloudsn(:,:,:,cm_index,:) = 0.0
-        cloudsnh(:,:,cm_index,:) = 0.0
-        rhon(:,:,:,cm_index,:) = 0.0
-        drhodzn(:,:,:,cm_index,:) = 0.0
-        tthn(:,:,:,cm_index,:) = 0.0
-        qvhn(:,:,:,cm_index,:) = 0.0
-
-        ! 2d nested fields
-        psn(:,:,:,cm_index,:) = 0.0
-        sdn(:,:,:,cm_index,:) = 0.0
-        msln(:,:,:,cm_index,:) = 0.0
-        tccn(:,:,:,cm_index,:) = 0.0
-        u10n(:,:,:,cm_index,:) = 0.0
-        v10n(:,:,:,cm_index,:) = 0.0
-        tt2n(:,:,:,cm_index,:) = 0.0
-        td2n(:,:,:,cm_index,:) = 0.0
-        lsprecn(:,:,:,cm_index,:) = 0.0
-        convprecn(:,:,:,cm_index,:) = 0.0
-        sshfn(:,:,:,cm_index,:) = 0.0
-        ssrn(:,:,:,cm_index,:) = 0.0
-        surfstrn(:,:,:,cm_index,:) = 0.0
-        ustarn(:,:,:,cm_index,:) = 0.0
-        wstarn(:,:,:,cm_index,:) = 0.0
-        hmixn(:,:,:,cm_index,:) = 0.0
-        tropopausen(:,:,:,cm_index,:) = 0.0
-        olin(:,:,:,cm_index,:) = 0.0
-        diffkn(:,:,:,cm_index,:) = 0.0
-        vdepn(:,:,:,cm_index,:) = 0.0
-
-        ! Auxiliary variables for nests
-        xresoln(:) = 0.0
-        yresoln(:) = 0.0
-        xln(:) = 0.0
-        yln(:) = 0.0
-        xrn(:) = 0.0
-        yrn(:) = 0.0
-
-        ! Variables for polar stereographic projection
-        xglobal=.FALSE.; sglobal=.FALSE.; nglobal=.FALSE.
-        switchnorthg=0.0; switchsouthg=0.0
-        southpolemap(:) = 0.0
-        northpolemap(:) = 0.0
-
-        ! Variables declared in conv_mod (convection)
-        pconv(:) = 0.0
-        phconv(:) = 0.0
-        dpr(:) = 0.0
-        pconv_hpa(:) = 0.0
-        phconv_hpa(:) = 0.0
-        ft(:) = 0.0
-        fq(:) = 0.0
-        fmass(:,:) = 0.0
-        sub(:) = 0.0
-        fmassfrac(:,:) = 0.0
-        cbaseflux(:,:) = 0.0
-        cbasefluxn(:,:,:) = 0.0
-        tconv(:) = 0.0
-        qconv(:) = 0.0
-        qsconv(:) = 0.0
-        psconv=0.0; tt2conv=0.0; td2conv=0.0
-        nconvlev=0.0; nconvtop=0.0
-
-    END SUBROUTINE fpmetbinary_zero
-
-    SUBROUTINE fpio(iounit, ncid, op, cm_index)
+
+    SUBROUTINE fpio(ncid, op, cm_index)
         IMPLICIT NONE
         INTEGER, INTENT(IN) :: ncid               ! NetCDF file id
-        INTEGER, INTENT(IN) :: iounit
         CHARACTER(LEN=4), INTENT(IN) :: op        ! Operation - DUMP or LOAD
         INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
                                                   ! most com_mod variables.
@@ -379,18 +211,12 @@ PRINT *, 'OPENED NC4 FILE FOR READING...'
             !  NEED TO FILL THIS IN FOR NC4
 
 
-#ifdef RAWBIN
-            WRITE (iounit) PREPROC_FORMAT_VERSION_STR
 
-#endif
 
             ! Write the compiled max dimensions from par_mod - these are
             ! not meant to be reassigned during a LOAD, but used as "header"
             ! information to provide the structure of arrays
 
-#ifdef RAWBIN
-            WRITE (iounit) nxmax, nymax, nzmax, nuvzmax, nwzmax
-#endif
 
 
             ! Dimension for the preprocessing format string
@@ -448,13 +274,6 @@ PRINT *, '1'
             call handle_nf90_err(ncret)
 
 
-
-#ifdef RAWBIN
-            WRITE(iounit) nx, ny, nxmin1, nymin1, nxfield
-            WRITE(iounit) nuvz, nwz, nz, nmixz, nlev_ec
-            WRITE(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
-#endif
-
             ncret = nf90_def_var(ncid, 'nx', NF90_INT, ncvarid)
             call handle_nf90_err(ncret)
             ncret = nf90_put_var(ncid, ncvarid, nx)
@@ -538,12 +357,6 @@ PRINT *, '1'
 
 
             ! Fixed fields, static in time
-
-
-#ifdef RAWBIN
-            WRITE(iounit) oro, excessoro, lsm, xlanduse, height
-#endif
-
             dim2dids = (/nxmax_dimid, nymax_dimid/)
 
             ncret = nf90_def_var(ncid, 'oro', NF90_FLOAT, &
@@ -613,28 +426,6 @@ PRINT *, '1'
 
 
             ! 3d fields
-
-
-
-#ifdef RAWBIN
-            WRITE(iounit) uu(:,:,:,cm_index)
-            WRITE(iounit) vv(:,:,:,cm_index)
-            WRITE(iounit) uupol(:,:,:,cm_index)
-            WRITE(iounit) vvpol(:,:,:,cm_index)
-            WRITE(iounit) ww(:,:,:,cm_index)
-            WRITE(iounit) tt(:,:,:,cm_index)
-            WRITE(iounit) qv(:,:,:,cm_index)
-            WRITE(iounit) pv(:,:,:,cm_index)
-            WRITE(iounit) rho(:,:,:,cm_index)
-            WRITE(iounit) drhodz(:,:,:,cm_index)
-            WRITE(iounit) tth(:,:,:,cm_index)
-            WRITE(iounit) qvh(:,:,:,cm_index)
-            WRITE(iounit) pplev(:,:,:,cm_index)
-            WRITE(iounit) clouds(:,:,:,cm_index)
-            WRITE(iounit) cloudsh(:,:,cm_index)
-#endif
-
-
             dim3dids = (/nxmax_dimid, nymax_dimid, nzmax_dimid/)
 
             ncret = nf90_def_var(ncid, 'uu', NF90_FLOAT, &
@@ -835,32 +626,6 @@ PRINT *, '1'
 
 
             ! 2d fields
-
-
-#ifdef RAWBIN
-            WRITE(iounit) ps(:,:,:,cm_index)
-            WRITE(iounit) sd(:,:,:,cm_index)
-            WRITE(iounit) msl(:,:,:,cm_index)
-            WRITE(iounit) tcc(:,:,:,cm_index)
-            WRITE(iounit) u10(:,:,:,cm_index)
-            WRITE(iounit) v10(:,:,:,cm_index)
-            WRITE(iounit) tt2(:,:,:,cm_index)
-            WRITE(iounit) td2(:,:,:,cm_index)
-            WRITE(iounit) lsprec(:,:,:,cm_index)
-            WRITE(iounit) convprec(:,:,:,cm_index)
-            WRITE(iounit) sshf(:,:,:,cm_index)
-            WRITE(iounit) ssr(:,:,:,cm_index)
-            WRITE(iounit) surfstr(:,:,:,cm_index)
-            WRITE(iounit) ustar(:,:,:,cm_index)
-            WRITE(iounit) wstar(:,:,:,cm_index)
-            WRITE(iounit) hmix(:,:,:,cm_index)
-            WRITE(iounit) tropopause(:,:,:,cm_index)
-            WRITE(iounit) oli(:,:,:,cm_index)
-            WRITE(iounit) diffk(:,:,:,cm_index)
-            WRITE(iounit) vdep(:,:,:,cm_index)
-#endif
-
-
             dim2dids = (/nxmax_dimid, nymax_dimid/)
 
             ncret = nf90_def_var(ncid, 'ps', NF90_FLOAT, &
@@ -1117,19 +882,6 @@ PRINT *, '1'
 
 
             ! 1d fields
-
-
-
-#ifdef RAWBIN
-            WRITE(iounit) z0(:)
-            WRITE(iounit) akm(:)
-            WRITE(iounit) bkm(:)
-            WRITE(iounit) akz(:)
-            WRITE(iounit) bkz(:)
-            WRITE(iounit) aknew(:)
-            WRITE(iounit) bknew(:)
-#endif
-
             dim1dids = (/numclass_dimid/)
 
             ncret = nf90_def_var(ncid, 'z0', NF90_FLOAT, &
@@ -1241,17 +993,7 @@ PRINT *, '1'
             call handle_nf90_err(ncret)
 
 
-#ifdef RAWBIN
-            WRITE(iounit) nxn(:)
-            WRITE(iounit) nyn(:)
-            WRITE(iounit) dxn(:)
-            WRITE(iounit) dyn(:)
-            WRITE(iounit) xlon0n(:)
-            WRITE(iounit) ylat0n(:)
-#endif
-
             ! Nested, scalar values (for each nest)
-
             dim1dids = (/maxnests_dimid/)
 
             ncret = nf90_def_var(ncid, 'nxn', NF90_INT, &
@@ -1330,8 +1072,6 @@ PRINT *, '1'
 
 
             ! Nested fields, static over time
-            WRITE(iounit) oron, excessoron, lsmn, xlandusen 
-
             dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
 
             ncret = nf90_def_var(ncid, 'oron', NF90_FLOAT, &
@@ -1389,24 +1129,6 @@ PRINT *, '1'
 
 
             ! 3d nested fields
-
-
-
-#ifdef RAWBIN
-            WRITE(iounit) uun(:,:,:,cm_index,:)
-            WRITE(iounit) vvn(:,:,:,cm_index,:)
-            WRITE(iounit) wwn(:,:,:,cm_index,:)
-            WRITE(iounit) ttn(:,:,:,cm_index,:)
-            WRITE(iounit) qvn(:,:,:,cm_index,:)
-            WRITE(iounit) pvn(:,:,:,cm_index,:)
-            WRITE(iounit) cloudsn(:,:,:,cm_index,:)
-            WRITE(iounit) cloudsnh(:,:,cm_index,:)
-            WRITE(iounit) rhon(:,:,:,cm_index,:)
-            WRITE(iounit) drhodzn(:,:,:,cm_index,:)
-            WRITE(iounit) tthn(:,:,:,cm_index,:)
-            WRITE(iounit) qvhn(:,:,:,cm_index,:)
-#endif
-
             dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nzmax_dimid, maxnests_dimid/)
 
             ncret = nf90_def_var(ncid, 'uun', NF90_FLOAT, &
@@ -1564,13 +1286,6 @@ PRINT *, '1'
             call handle_nf90_err(ncret)
 
 
-
-
-
-
-
-
-
             PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
             PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
             PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
@@ -1578,32 +1293,6 @@ PRINT *, '1'
 
 
             ! 2d nested fields
-
-
-#ifdef RAWBIN
-            WRITE(iounit) psn(:,:,:,cm_index,:)
-            WRITE(iounit) sdn(:,:,:,cm_index,:)
-            WRITE(iounit) msln(:,:,:,cm_index,:)
-            WRITE(iounit) tccn(:,:,:,cm_index,:)
-            WRITE(iounit) u10n(:,:,:,cm_index,:)
-            WRITE(iounit) v10n(:,:,:,cm_index,:)
-            WRITE(iounit) tt2n(:,:,:,cm_index,:)
-            WRITE(iounit) td2n(:,:,:,cm_index,:)
-            WRITE(iounit) lsprecn(:,:,:,cm_index,:)
-            WRITE(iounit) convprecn(:,:,:,cm_index,:)
-            WRITE(iounit) sshfn(:,:,:,cm_index,:)
-            WRITE(iounit) ssrn(:,:,:,cm_index,:)
-            WRITE(iounit) surfstrn(:,:,:,cm_index,:)
-            WRITE(iounit) ustarn(:,:,:,cm_index,:)
-            WRITE(iounit) wstarn(:,:,:,cm_index,:)
-            WRITE(iounit) hmixn(:,:,:,cm_index,:)
-            WRITE(iounit) tropopausen(:,:,:,cm_index,:)
-            WRITE(iounit) olin(:,:,:,cm_index,:)
-            WRITE(iounit) diffkn(:,:,:,cm_index,:)
-            WRITE(iounit) vdepn(:,:,:,cm_index,:)
-#endif
-
-
             dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
 
             ncret = nf90_def_var(ncid, 'psn', NF90_FLOAT, &
@@ -1851,28 +1540,13 @@ PRINT *, '1'
             call handle_nf90_err(ncret)
 
 
-
-
             PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
             PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
             PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
 
 
 
-
-
             ! Auxiliary variables for nests
-
-#ifdef RAWBIN
-            WRITE(iounit) xresoln(:)
-            WRITE(iounit) yresoln(:)
-            WRITE(iounit) xln(:)
-            WRITE(iounit) yln(:)
-            WRITE(iounit) xrn(:)
-            WRITE(iounit) yrn(:)
-#endif
-
-
             dim1dids = (/zero_to_maxnests_dimid/)
 
             ncret = nf90_def_var(ncid, 'xresoln', NF90_FLOAT, &
@@ -1955,17 +1629,6 @@ PRINT *, '1'
 
 
             ! Variables for polar stereographic projection
-
-
-
-#ifdef RAWBIN
-            WRITE(iounit) xglobal, sglobal, nglobal
-            WRITE(iounit) switchnorthg, switchsouthg
-            WRITE(iounit) southpolemap(:)
-            WRITE(iounit) northpolemap(:)
-#endif
-
-
             dim1dids = (/polemap_dimid/)
 
             ncret = nf90_def_var(ncid, 'southpolemap', NF90_FLOAT, &
@@ -2024,29 +1687,6 @@ PRINT *, '1'
             PRINT *, 'switchsouthg: ', switchsouthg
 
             ! Variables declared in conv_mod (convection)
-
-
-#ifdef RAWBIN
-            WRITE(iounit) pconv(:)
-            WRITE(iounit) phconv(:)
-            WRITE(iounit) dpr(:)
-            WRITE(iounit) pconv_hpa(:)
-            WRITE(iounit) phconv_hpa(:)
-            WRITE(iounit) ft(:)
-            WRITE(iounit) fq(:)
-            WRITE(iounit) fmass(:,:)
-            WRITE(iounit) sub(:)
-            WRITE(iounit) fmassfrac(:,:)
-            WRITE(iounit) cbaseflux(:,:)
-            WRITE(iounit) cbasefluxn(:,:,:)
-            WRITE(iounit) tconv(:)
-            WRITE(iounit) qconv(:)
-            WRITE(iounit) qsconv(:)
-            WRITE(iounit) psconv, tt2conv, td2conv
-            WRITE(iounit) nconvlev, nconvtop
-#endif
-
-
             dim1dids = (/nconvlevmax_dimid/)
 
             ncret = nf90_def_var(ncid, 'pconv', NF90_FLOAT, &
@@ -2236,18 +1876,6 @@ PRINT *, '1'
 
             ! Read the preprocessed format version string and insure it
             ! matches this version
-
-
-
-
-
-
-
-#ifdef RAWBIN
-            READ (iounit) temp_preproc_format_version_str
-#endif
-
-
             ncret = nf90_inq_dimid(ncid, 'preproc_fmt_str_dim', preproc_fmt_str_dimid)
             call handle_nf90_err(ncret)            
             ncret = nf90_inquire_dimension(ncid, preproc_fmt_str_dimid, preproc_fmt_str_dimname, &
@@ -2284,22 +1912,7 @@ PRINT *, '1'
             ! current FLEXPART dimensions - they need to be the same, or else
             ! we abort.
 
-
-
-#ifdef RAWBIN
-            READ (iounit) temp_nxmax, temp_nymax, temp_nzmax, &
-&                         temp_nuvzmax, temp_nwzmax
-#endif
-
-
-
-
-
             ! Get dimensions
-            
-            
-
-
             ncret = nf90_inq_dimid(ncid, 'nxmax', nxmax_dimid)
             call handle_nf90_err(ncret)            
             ncret = nf90_inquire_dimension(ncid, nxmax_dimid, nxmax_dimname, &
@@ -2380,14 +1993,6 @@ PRINT *, '1'
             ! Scalar values
 
 
-#ifdef RAWBIN
-            READ(iounit) nx, ny, nxmin1, nymin1, nxfield
-            READ(iounit) nuvz, nwz, nz, nmixz, nlev_ec
-            READ(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
-#endif
-
-
-
             ! Get the varid , then read into scalar variable
             ncret = nf90_inq_varid(ncid, 'nx', ncvarid)
             call handle_nf90_err(ncret)
@@ -2475,11 +2080,6 @@ PRINT *, '1'
 
 
             ! Fixed fields, static in time
-            
-#ifdef RAWBIN            
-            READ(iounit) oro, excessoro, lsm, xlanduse, height
-#endif
-
             ncret = nf90_inq_varid(ncid, 'oro', ncvarid)
             call handle_nf90_err(ncret)
             ncret = nf90_get_var(ncid, ncvarid, oro(0:nxmax-1,0:nymax-1))
@@ -2510,28 +2110,6 @@ PRINT *, '1'
 
             ! 3d fields
 
-
-
-#ifdef RAWBIN
-            READ(iounit) uu(:,:,:,cm_index)
-            READ(iounit) vv(:,:,:,cm_index)
-            READ(iounit) uupol(:,:,:,cm_index)
-            READ(iounit) vvpol(:,:,:,cm_index)
-            READ(iounit) ww(:,:,:,cm_index)
-            READ(iounit) tt(:,:,:,cm_index)
-            READ(iounit) qv(:,:,:,cm_index)
-            READ(iounit) pv(:,:,:,cm_index)
-            READ(iounit) rho(:,:,:,cm_index)
-            READ(iounit) drhodz(:,:,:,cm_index)
-            READ(iounit) tth(:,:,:,cm_index)
-            READ(iounit) qvh(:,:,:,cm_index)
-            READ(iounit) pplev(:,:,:,cm_index)
-            READ(iounit) clouds(:,:,:,cm_index)
-            READ(iounit) cloudsh(:,:,cm_index)
-#endif
-
-
-
             ! Get the varid and read the variable into the array
             ncret = nf90_inq_varid(ncid, 'uu', ncvarid)
             call handle_nf90_err(ncret)
@@ -2622,32 +2200,6 @@ PRINT *, '1'
 
             ! 2d fields
 
-
-#ifdef RAWBIN
-            READ(iounit) ps(:,:,:,cm_index)
-            READ(iounit) sd(:,:,:,cm_index)
-            READ(iounit) msl(:,:,:,cm_index)
-            READ(iounit) tcc(:,:,:,cm_index)
-            READ(iounit) u10(:,:,:,cm_index)
-            READ(iounit) v10(:,:,:,cm_index)
-            READ(iounit) tt2(:,:,:,cm_index)
-            READ(iounit) td2(:,:,:,cm_index)
-            READ(iounit) lsprec(:,:,:,cm_index)
-            READ(iounit) convprec(:,:,:,cm_index)
-            READ(iounit) sshf(:,:,:,cm_index)
-            READ(iounit) ssr(:,:,:,cm_index)
-            READ(iounit) surfstr(:,:,:,cm_index)
-            READ(iounit) ustar(:,:,:,cm_index)
-            READ(iounit) wstar(:,:,:,cm_index)
-            READ(iounit) hmix(:,:,:,cm_index)
-            READ(iounit) tropopause(:,:,:,cm_index)
-            READ(iounit) oli(:,:,:,cm_index)
-            READ(iounit) diffk(:,:,:,cm_index)
-            READ(iounit) vdep(:,:,:,cm_index)
-#endif
-
-
-
             ! Get the varid and read the variable into the array
             ncret = nf90_inq_varid(ncid, 'ps', ncvarid)
             call handle_nf90_err(ncret)
@@ -2765,16 +2317,6 @@ PRINT *, '1'
 
             ! 1d fields
 
-#ifdef RAWBIN
-            READ(iounit) z0(:)
-            READ(iounit) akm(:)
-            READ(iounit) bkm(:)
-            READ(iounit) akz(:)
-            READ(iounit) bkz(:)
-            READ(iounit) aknew(:)
-            READ(iounit) bknew(:)
-#endif
-
             ncret = nf90_inq_varid(ncid, 'z0', ncvarid)
             call handle_nf90_err(ncret)
             ncret = nf90_get_var(ncid, ncvarid, z0(1:numclass))
@@ -2864,20 +2406,6 @@ PRINT *, '1'
 
 
             ! Nested, scalar values (for each nest)
-
-
-
-
-#ifdef RAWBIN
-            READ(iounit) nxn(:)
-            READ(iounit) nyn(:)
-            READ(iounit) dxn(:)
-            READ(iounit) dyn(:)
-            READ(iounit) xlon0n(:)
-            READ(iounit) ylat0n(:)
-#endif
-
-
             ncret = nf90_inq_varid(ncid, 'nxn', ncvarid)
             call handle_nf90_err(ncret)
             ncret = nf90_get_var(ncid, ncvarid, nxn(1:maxnests))
@@ -2911,11 +2439,6 @@ PRINT *, '1'
 
 
             ! Nested fields, static over time
-
-#ifdef RAWBIN
-            READ(iounit) oron, excessoron, lsmn, xlandusen 
-#endif
-
             ncret = nf90_inq_varid(ncid, 'oron', ncvarid)
             call handle_nf90_err(ncret)
             ncret = nf90_get_var(ncid, ncvarid, oron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
@@ -2944,21 +2467,6 @@ PRINT *, '1'
 
             ! 3d nested fields
 
-#ifdef RAWBIN
-            READ(iounit) uun(:,:,:,cm_index,:)
-            READ(iounit) vvn(:,:,:,cm_index,:)
-            READ(iounit) wwn(:,:,:,cm_index,:)
-            READ(iounit) ttn(:,:,:,cm_index,:)
-            READ(iounit) qvn(:,:,:,cm_index,:)
-            READ(iounit) pvn(:,:,:,cm_index,:)
-            READ(iounit) cloudsn(:,:,:,cm_index,:)
-            READ(iounit) cloudsnh(:,:,cm_index,:)
-            READ(iounit) rhon(:,:,:,cm_index,:)
-            READ(iounit) drhodzn(:,:,:,cm_index,:)
-            READ(iounit) tthn(:,:,:,cm_index,:)
-            READ(iounit) qvhn(:,:,:,cm_index,:)
-#endif
-
             ncret = nf90_inq_varid(ncid, 'uun', ncvarid)
             call handle_nf90_err(ncret)
             ncret = nf90_get_var(ncid, ncvarid, uun(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
@@ -3030,32 +2538,6 @@ PRINT *, '1'
 
 
             ! 2d nested fields
-
-
-#ifdef RAWBIN
-            READ(iounit) psn(:,:,:,cm_index,:)
-            READ(iounit) sdn(:,:,:,cm_index,:)
-            READ(iounit) msln(:,:,:,cm_index,:)
-            READ(iounit) tccn(:,:,:,cm_index,:)
-            READ(iounit) u10n(:,:,:,cm_index,:)
-            READ(iounit) v10n(:,:,:,cm_index,:)
-            READ(iounit) tt2n(:,:,:,cm_index,:)
-            READ(iounit) td2n(:,:,:,cm_index,:)
-            READ(iounit) lsprecn(:,:,:,cm_index,:)
-            READ(iounit) convprecn(:,:,:,cm_index,:)
-            READ(iounit) sshfn(:,:,:,cm_index,:)
-            READ(iounit) ssrn(:,:,:,cm_index,:)
-            READ(iounit) surfstrn(:,:,:,cm_index,:)
-            READ(iounit) ustarn(:,:,:,cm_index,:)
-            READ(iounit) wstarn(:,:,:,cm_index,:)
-            READ(iounit) hmixn(:,:,:,cm_index,:)
-            READ(iounit) tropopausen(:,:,:,cm_index,:)
-            READ(iounit) olin(:,:,:,cm_index,:)
-            READ(iounit) diffkn(:,:,:,cm_index,:)
-            READ(iounit) vdepn(:,:,:,cm_index,:)
-#endif
-
-
             ncret = nf90_inq_varid(ncid, 'psn', ncvarid)
             call handle_nf90_err(ncret)
             ncret = nf90_get_var(ncid, ncvarid, psn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
@@ -3166,18 +2648,6 @@ PRINT *, '1'
 
 
             ! Auxiliary variables for nests
-
-
-#ifdef RAWBIN
-            READ(iounit) xresoln(:)
-            READ(iounit) yresoln(:)
-            READ(iounit) xln(:)
-            READ(iounit) yln(:)
-            READ(iounit) xrn(:)
-            READ(iounit) yrn(:)
-#endif
-
-
             ncret = nf90_inq_varid(ncid, 'xresoln', ncvarid)
             call handle_nf90_err(ncret)
             ncret = nf90_get_var(ncid, ncvarid, xresoln(0:maxnests))
@@ -3216,15 +2686,6 @@ PRINT *, '1'
 
 
             ! Variables for polar stereographic projection
-
-
-#ifdef RAWBIN
-            READ(iounit) xglobal, sglobal, nglobal
-            READ(iounit) switchnorthg, switchsouthg
-            READ(iounit) southpolemap(:)
-            READ(iounit) northpolemap(:)
-#endif
-
             ncret = nf90_inq_varid(ncid, 'southpolemap', ncvarid)
             call handle_nf90_err(ncret)
             ncret = nf90_get_var(ncid, ncvarid, southpolemap(:))
@@ -3276,30 +2737,6 @@ PRINT *, '1'
 
 
             ! Variables declared in conv_mod (convection)
-
-
-#ifdef RAWBIN
-            READ(iounit) pconv(:)
-            READ(iounit) phconv(:)
-            READ(iounit) dpr(:)
-            READ(iounit) pconv_hpa(:)
-            READ(iounit) phconv_hpa(:)
-            READ(iounit) ft(:)
-            READ(iounit) fq(:)
-            READ(iounit) fmass(:,:)
-            READ(iounit) sub(:)
-            READ(iounit) fmassfrac(:,:)
-            READ(iounit) cbaseflux(:,:)
-            READ(iounit) cbasefluxn(:,:,:)
-            READ(iounit) tconv(:)
-            READ(iounit) qconv(:)
-            READ(iounit) qsconv(:)
-            READ(iounit) psconv, tt2conv, td2conv
-            READ(iounit) nconvlev, nconvtop
-#endif
-
-
-
             ncret = nf90_inq_varid(ncid, 'pconv', ncvarid)
             call handle_nf90_err(ncret)
             ncret = nf90_get_var(ncid, ncvarid, pconv(:))
@@ -3418,51 +2855,560 @@ PRINT *, '1'
         ENDIF
     END SUBROUTINE fpio
 
-    SUBROUTINE fpmetbinary_filetext(filename, cm_index)
 
-        ! This is a utility subroutine meant to be used for testing purposes.
-        ! It facilitates the text output of variables read in from the 
-        ! specified .fp file.  This routine will easily cause the program
-        ! to crash due memory allocation issues, particularly when you are
-        ! trying to text print 3d arrays in a single formatted statetment.
-        
-        CHARACTER(LEN=*), INTENT(IN) :: filename
+
+
+
+    SUBROUTINE fpio_rawbin(iounit, op, cm_index)
+        IMPLICIT NONE
+        INTEGER, INTENT(IN) :: iounit
+        CHARACTER(LEN=4), INTENT(IN) :: op        ! Operation - DUMP or LOAD
         INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
                                                   ! most com_mod variables.
                                                   ! Should be 1 or 2 
 
-        !OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', status='REPLACE', &
-        !    form="formatted", access="stream")
-        OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', &
-             form="formatted", access="APPEND")
-
-        WRITE(IOUNIT_TEXTOUT, *) 'oro: ', oro
-        WRITE(IOUNIT_TEXTOUT, *) 'excessoro: ', excessoro
-        WRITE(IOUNIT_TEXTOUT, *) 'lsm: ', lsm
-        WRITE(IOUNIT_TEXTOUT, *) 'xlanduse: ', xlanduse
-        WRITE(IOUNIT_TEXTOUT, *) 'height: ', height
-
-        WRITE(IOUNIT_TEXTOUT, *) 'uu: ', uu(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'vv: ', vv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'uupol: ', uupol(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'vvpol: ', vvpol(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'ww: ', ww(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'tt: ', tt(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'qv: ', qv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'pv: ', pv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'rho: ', rho(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'drhodz: ', drhodz(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'tth: ', tth(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'qvh: ', qvh(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'pplev: ', pplev(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'clouds: ', clouds(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'cloudsh: ', cloudsh(:,:,cm_index)
-
-
-
-
-        CLOSE(IOUNIT_TEXTOUT)
-    END SUBROUTINE fpmetbinary_filetext
+
+        INTEGER :: temp_integer   ! temporary value
+
+
+        ! These are temporary variables, used in the LOAD option, for 
+        ! comparing against the current values in FLEXPART of nxmax, nymax, ...
+        INTEGER :: temp_nxmax, temp_nymax, temp_nzmax, &
+&                  temp_nuvzmax, temp_nwzmax, &
+&                  temp_maxspec, temp_numclass,&
+&                  temp_maxnests, temp_nxmaxn, temp_nymaxn, temp_preproc_fmt_str_dim
+
+        CHARACTER(LEN=PREPROC_FMT_STR_DIM) :: temp_preproc_format_version_str
+
+        CHARACTER(LEN=128) :: errmesg
+
+        INTEGER, PARAMETER :: DEF_LEVEL = 3
+
+        if (op == 'DUMP') THEN
+
+
+            ! Write the preprocessing format version string
+            !  NEED TO FILL THIS IN FOR NC4
+
+
+
+            WRITE (iounit) PREPROC_FORMAT_VERSION_STR
+
+
+            ! Write the compiled max dimensions from par_mod - these are
+            ! not meant to be reassigned during a LOAD, but used as "header"
+            ! information to provide the structure of arrays
+
+
+            WRITE (iounit) nxmax, nymax, nzmax, nuvzmax, nwzmax
+
+
+
+
+            ! Scalar values
+
+            ! Fixed fields, static in time
+
+
+
+            WRITE(iounit) oro, excessoro, lsm, xlanduse, height
+
+
+ 
+
+            ! 3d fields
+            WRITE(iounit) uu(:,:,:,cm_index)
+            WRITE(iounit) vv(:,:,:,cm_index)
+            WRITE(iounit) uupol(:,:,:,cm_index)
+            WRITE(iounit) vvpol(:,:,:,cm_index)
+            WRITE(iounit) ww(:,:,:,cm_index)
+            WRITE(iounit) tt(:,:,:,cm_index)
+            WRITE(iounit) qv(:,:,:,cm_index)
+            WRITE(iounit) pv(:,:,:,cm_index)
+            WRITE(iounit) rho(:,:,:,cm_index)
+            WRITE(iounit) drhodz(:,:,:,cm_index)
+            WRITE(iounit) tth(:,:,:,cm_index)
+            WRITE(iounit) qvh(:,:,:,cm_index)
+            WRITE(iounit) pplev(:,:,:,cm_index)
+            WRITE(iounit) clouds(:,:,:,cm_index)
+            WRITE(iounit) cloudsh(:,:,cm_index)
+
+
+
+!            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
+!&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
+
+!            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
+!&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
+
+
+
+            ! 2d fields
+            WRITE(iounit) ps(:,:,:,cm_index)
+            WRITE(iounit) sd(:,:,:,cm_index)
+            WRITE(iounit) msl(:,:,:,cm_index)
+            WRITE(iounit) tcc(:,:,:,cm_index)
+            WRITE(iounit) u10(:,:,:,cm_index)
+            WRITE(iounit) v10(:,:,:,cm_index)
+            WRITE(iounit) tt2(:,:,:,cm_index)
+            WRITE(iounit) td2(:,:,:,cm_index)
+            WRITE(iounit) lsprec(:,:,:,cm_index)
+            WRITE(iounit) convprec(:,:,:,cm_index)
+            WRITE(iounit) sshf(:,:,:,cm_index)
+            WRITE(iounit) ssr(:,:,:,cm_index)
+            WRITE(iounit) surfstr(:,:,:,cm_index)
+            WRITE(iounit) ustar(:,:,:,cm_index)
+            WRITE(iounit) wstar(:,:,:,cm_index)
+            WRITE(iounit) hmix(:,:,:,cm_index)
+            WRITE(iounit) tropopause(:,:,:,cm_index)
+            WRITE(iounit) oli(:,:,:,cm_index)
+            WRITE(iounit) diffk(:,:,:,cm_index)
+            WRITE(iounit) vdep(:,:,:,cm_index)
+
+
+
+
+            ! 1d fields
+            WRITE(iounit) z0(:)
+            WRITE(iounit) akm(:)
+            WRITE(iounit) bkm(:)
+            WRITE(iounit) akz(:)
+            WRITE(iounit) bkz(:)
+            WRITE(iounit) aknew(:)
+            WRITE(iounit) bknew(:)
+
+
+
+
+
+!            PRINT *, 'SUM(bknew(1:nzmax)): ', &
+!&                                        SUM(bknew(1:nzmax))
+
+
+
+            ! Getting ready to add in nested code
+
+            ! These are compiled max dimensions from par_mod - these are
+            ! not meant to be reassigned during a LOAD, but used as "header"
+            ! information to provide the structure of arrays
+            WRITE(iounit) nxn(:)
+            WRITE(iounit) nyn(:)
+            WRITE(iounit) dxn(:)
+            WRITE(iounit) dyn(:)
+            WRITE(iounit) xlon0n(:)
+            WRITE(iounit) ylat0n(:)
+
+            ! Nested, scalar values (for each nest)
+
+
+            ! Nested fields, static over time
+            WRITE(iounit) oron, excessoron, lsmn, xlandusen 
+
+
+!           PRINT *, 'SUM(oron): ', SUM(oron)
+
+
+
+            ! 3d nested fields
+            WRITE(iounit) uun(:,:,:,cm_index,:)
+            WRITE(iounit) vvn(:,:,:,cm_index,:)
+            WRITE(iounit) wwn(:,:,:,cm_index,:)
+            WRITE(iounit) ttn(:,:,:,cm_index,:)
+            WRITE(iounit) qvn(:,:,:,cm_index,:)
+            WRITE(iounit) pvn(:,:,:,cm_index,:)
+            WRITE(iounit) cloudsn(:,:,:,cm_index,:)
+            WRITE(iounit) cloudsnh(:,:,cm_index,:)
+            WRITE(iounit) rhon(:,:,:,cm_index,:)
+            WRITE(iounit) drhodzn(:,:,:,cm_index,:)
+            WRITE(iounit) tthn(:,:,:,cm_index,:)
+            WRITE(iounit) qvhn(:,:,:,cm_index,:)
+
+
+
+!            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
+!            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
+!            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
+
+
+
+            ! 2d nested fields
+            WRITE(iounit) psn(:,:,:,cm_index,:)
+            WRITE(iounit) sdn(:,:,:,cm_index,:)
+            WRITE(iounit) msln(:,:,:,cm_index,:)
+            WRITE(iounit) tccn(:,:,:,cm_index,:)
+            WRITE(iounit) u10n(:,:,:,cm_index,:)
+            WRITE(iounit) v10n(:,:,:,cm_index,:)
+            WRITE(iounit) tt2n(:,:,:,cm_index,:)
+            WRITE(iounit) td2n(:,:,:,cm_index,:)
+            WRITE(iounit) lsprecn(:,:,:,cm_index,:)
+            WRITE(iounit) convprecn(:,:,:,cm_index,:)
+            WRITE(iounit) sshfn(:,:,:,cm_index,:)
+            WRITE(iounit) ssrn(:,:,:,cm_index,:)
+            WRITE(iounit) surfstrn(:,:,:,cm_index,:)
+            WRITE(iounit) ustarn(:,:,:,cm_index,:)
+            WRITE(iounit) wstarn(:,:,:,cm_index,:)
+            WRITE(iounit) hmixn(:,:,:,cm_index,:)
+            WRITE(iounit) tropopausen(:,:,:,cm_index,:)
+            WRITE(iounit) olin(:,:,:,cm_index,:)
+            WRITE(iounit) diffkn(:,:,:,cm_index,:)
+            WRITE(iounit) vdepn(:,:,:,cm_index,:)
+
+
+
+!            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
+!            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
+!            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
+
+
+
+
+
+            ! Auxiliary variables for nests
+            WRITE(iounit) xresoln(:)
+            WRITE(iounit) yresoln(:)
+            WRITE(iounit) xln(:)
+            WRITE(iounit) yln(:)
+            WRITE(iounit) xrn(:)
+            WRITE(iounit) yrn(:)
+
+
+
+!            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
+!            PRINT *, 'SUM(xrn): ', SUM(xrn)
+
+
+
+            ! Variables for polar stereographic projection
+            WRITE(iounit) xglobal, sglobal, nglobal
+            WRITE(iounit) switchnorthg, switchsouthg
+            WRITE(iounit) southpolemap(:)
+            WRITE(iounit) northpolemap(:)
+
+
+
+
+
+!            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
+!            PRINT *, 'xglobal: ', xglobal
+!            PRINT *, 'sglobal: ', sglobal
+!            PRINT *, 'nglobal: ', nglobal
+!            PRINT *, 'switchsouthg: ', switchsouthg
+
+            ! Variables declared in conv_mod (convection)
+            WRITE(iounit) pconv(:)
+            WRITE(iounit) phconv(:)
+            WRITE(iounit) dpr(:)
+            WRITE(iounit) pconv_hpa(:)
+            WRITE(iounit) phconv_hpa(:)
+            WRITE(iounit) ft(:)
+            WRITE(iounit) fq(:)
+            WRITE(iounit) fmass(:,:)
+            WRITE(iounit) sub(:)
+            WRITE(iounit) fmassfrac(:,:)
+            WRITE(iounit) cbaseflux(:,:)
+            WRITE(iounit) cbasefluxn(:,:,:)
+            WRITE(iounit) tconv(:)
+            WRITE(iounit) qconv(:)
+            WRITE(iounit) qsconv(:)
+            WRITE(iounit) psconv, tt2conv, td2conv
+            WRITE(iounit) nconvlev, nconvtop
+
+
+
+
+!            PRINT *, 'SUM(pconv): ', SUM(pconv)
+!            PRINT *, 'SUM(qconv): ', SUM(qconv)
+!            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
+!            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
+!            PRINT *, 'tt2conv: ', tt2conv
+!            PRINT *, 'nconvlev: ', nconvlev
+
+
+
+        ELSE IF (op == 'LOAD') THEN 
+
+            ! Read the preprocessed format version string and insure it
+            ! matches this version
+            READ (iounit) temp_preproc_format_version_str
+
+            PRINT *, 'Reading preprocessed file format version: ', &
+&                    temp_preproc_format_version_str
+            IF (TRIM(temp_preproc_format_version_str) == &
+&                                        TRIM(PREPROC_FORMAT_VERSION_STR)) THEN
+                CONTINUE
+            ELSE
+                ! PRINT *, ''  GK: causes relocation truncated to fit: R_X86_64_32
+                PRINT *, 'Inconsistent preprocessing format version'
+                PRINT *, 'Expected Version: ', PREPROC_FORMAT_VERSION_STR
+                PRINT *, 'Detected Version: ', temp_preproc_format_version_str
+                ! PRINT *, ''
+                STOP
+            END IF
+
+
+            ! Read the compiled max dimensions that were dumped from par_mod 
+            ! when creating the fp file, so that we can compare against
+            ! current FLEXPART dimensions - they need to be the same, or else
+            ! we abort.
+            READ (iounit) temp_nxmax, temp_nymax, temp_nzmax, &
+&                         temp_nuvzmax, temp_nwzmax
+
+
+
+
+
+            ! Get dimensions
+            IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. &
+&                   (temp_nzmax == nzmax) .AND. &
+&                   (temp_nuvzmax == nuvzmax) .AND. &
+&                   (temp_nwzmax == nwzmax) ) THEN
+                CONTINUE
+            ELSE
+                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
+                PRINT *, '                  FP file     Compiled FP'
+                PRINT *, 'nxmax:     ', temp_nxmax, '    ', nxmax 
+                PRINT *, 'nymax:     ', temp_nymax, '    ', nymax 
+                PRINT *, 'nzmax:     ', temp_nzmax, '    ', nzmax 
+                PRINT *, 'nuvzmax:     ', temp_nuvzmax, '    ', nuvzmax 
+                PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax
+                STOP
+            END IF
+
+
+
+
+            ! Scalar values
+            READ(iounit) nx, ny, nxmin1, nymin1, nxfield
+            READ(iounit) nuvz, nwz, nz, nmixz, nlev_ec
+            READ(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
+
+
+
+
+
+            ! Fixed fields, static in time           
+            READ(iounit) oro, excessoro, lsm, xlanduse, height
+
+
+
+            ! 3d fields
+            READ(iounit) uu(:,:,:,cm_index)
+            READ(iounit) vv(:,:,:,cm_index)
+            READ(iounit) uupol(:,:,:,cm_index)
+            READ(iounit) vvpol(:,:,:,cm_index)
+            READ(iounit) ww(:,:,:,cm_index)
+            READ(iounit) tt(:,:,:,cm_index)
+            READ(iounit) qv(:,:,:,cm_index)
+            READ(iounit) pv(:,:,:,cm_index)
+            READ(iounit) rho(:,:,:,cm_index)
+            READ(iounit) drhodz(:,:,:,cm_index)
+            READ(iounit) tth(:,:,:,cm_index)
+            READ(iounit) qvh(:,:,:,cm_index)
+            READ(iounit) pplev(:,:,:,cm_index)
+            READ(iounit) clouds(:,:,:,cm_index)
+            READ(iounit) cloudsh(:,:,cm_index)
+
+
+!            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
+!&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
+
+
+!            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
+!&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
+
+
+
+            ! 2d fields
+            READ(iounit) ps(:,:,:,cm_index)
+            READ(iounit) sd(:,:,:,cm_index)
+            READ(iounit) msl(:,:,:,cm_index)
+            READ(iounit) tcc(:,:,:,cm_index)
+            READ(iounit) u10(:,:,:,cm_index)
+            READ(iounit) v10(:,:,:,cm_index)
+            READ(iounit) tt2(:,:,:,cm_index)
+            READ(iounit) td2(:,:,:,cm_index)
+            READ(iounit) lsprec(:,:,:,cm_index)
+            READ(iounit) convprec(:,:,:,cm_index)
+            READ(iounit) sshf(:,:,:,cm_index)
+            READ(iounit) ssr(:,:,:,cm_index)
+            READ(iounit) surfstr(:,:,:,cm_index)
+            READ(iounit) ustar(:,:,:,cm_index)
+            READ(iounit) wstar(:,:,:,cm_index)
+            READ(iounit) hmix(:,:,:,cm_index)
+            READ(iounit) tropopause(:,:,:,cm_index)
+            READ(iounit) oli(:,:,:,cm_index)
+            READ(iounit) diffk(:,:,:,cm_index)
+            READ(iounit) vdep(:,:,:,cm_index)
+
+
+
+
+
+!            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
+!&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
+
+!            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
+!&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
+
+
+
+
+            ! 1d fields
+            READ(iounit) z0(:)
+            READ(iounit) akm(:)
+            READ(iounit) bkm(:)
+            READ(iounit) akz(:)
+            READ(iounit) bkz(:)
+            READ(iounit) aknew(:)
+            READ(iounit) bknew(:)
+
+
+
+!            PRINT *, 'SUM(bknew(1:nzmax)): ', &
+!&                                        SUM(bknew(1:nzmax))
+
+
+
+
+
+            ! Nested, scalar values (for each nest)
+            READ(iounit) nxn(:)
+            READ(iounit) nyn(:)
+            READ(iounit) dxn(:)
+            READ(iounit) dyn(:)
+            READ(iounit) xlon0n(:)
+            READ(iounit) ylat0n(:)
+
+
+
+            ! Nested fields, static over time
+            READ(iounit) oron, excessoron, lsmn, xlandusen 
+
+
+
+!            PRINT *, 'SUM(oron): ', SUM(oron)
+
+
+
+
+            ! 3d nested fields
+            READ(iounit) uun(:,:,:,cm_index,:)
+            READ(iounit) vvn(:,:,:,cm_index,:)
+            READ(iounit) wwn(:,:,:,cm_index,:)
+            READ(iounit) ttn(:,:,:,cm_index,:)
+            READ(iounit) qvn(:,:,:,cm_index,:)
+            READ(iounit) pvn(:,:,:,cm_index,:)
+            READ(iounit) cloudsn(:,:,:,cm_index,:)
+            READ(iounit) cloudsnh(:,:,cm_index,:)
+            READ(iounit) rhon(:,:,:,cm_index,:)
+            READ(iounit) drhodzn(:,:,:,cm_index,:)
+            READ(iounit) tthn(:,:,:,cm_index,:)
+            READ(iounit) qvhn(:,:,:,cm_index,:)
+
+!            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
+!            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
+!            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
+
+
+
+
+            ! 2d nested fields
+            READ(iounit) psn(:,:,:,cm_index,:)
+            READ(iounit) sdn(:,:,:,cm_index,:)
+            READ(iounit) msln(:,:,:,cm_index,:)
+            READ(iounit) tccn(:,:,:,cm_index,:)
+            READ(iounit) u10n(:,:,:,cm_index,:)
+            READ(iounit) v10n(:,:,:,cm_index,:)
+            READ(iounit) tt2n(:,:,:,cm_index,:)
+            READ(iounit) td2n(:,:,:,cm_index,:)
+            READ(iounit) lsprecn(:,:,:,cm_index,:)
+            READ(iounit) convprecn(:,:,:,cm_index,:)
+            READ(iounit) sshfn(:,:,:,cm_index,:)
+            READ(iounit) ssrn(:,:,:,cm_index,:)
+            READ(iounit) surfstrn(:,:,:,cm_index,:)
+            READ(iounit) ustarn(:,:,:,cm_index,:)
+            READ(iounit) wstarn(:,:,:,cm_index,:)
+            READ(iounit) hmixn(:,:,:,cm_index,:)
+            READ(iounit) tropopausen(:,:,:,cm_index,:)
+            READ(iounit) olin(:,:,:,cm_index,:)
+            READ(iounit) diffkn(:,:,:,cm_index,:)
+            READ(iounit) vdepn(:,:,:,cm_index,:)
+
+!            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
+!            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
+!            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
+
+
+
+            ! Auxiliary variables for nests
+            READ(iounit) xresoln(:)
+            READ(iounit) yresoln(:)
+            READ(iounit) xln(:)
+            READ(iounit) yln(:)
+            READ(iounit) xrn(:)
+
+
+!            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
+!            PRINT *, 'SUM(xrn): ', SUM(xrn)
+
+
+
+            ! Variables for polar stereographic projection
+            READ(iounit) xglobal, sglobal, nglobal
+            READ(iounit) switchnorthg, switchsouthg
+            READ(iounit) southpolemap(:)
+            READ(iounit) northpolemap(:)
+
+
+!            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
+!            PRINT *, 'xglobal: ', xglobal
+!            PRINT *, 'sglobal: ', sglobal
+!            PRINT *, 'nglobal: ', nglobal
+!            PRINT *, 'switchsouthg: ', switchsouthg
+
+
+
+
+            ! Variables declared in conv_mod (convection)
+            READ(iounit) pconv(:)
+            READ(iounit) phconv(:)
+            READ(iounit) dpr(:)
+            READ(iounit) pconv_hpa(:)
+            READ(iounit) phconv_hpa(:)
+            READ(iounit) ft(:)
+            READ(iounit) fq(:)
+            READ(iounit) fmass(:,:)
+            READ(iounit) sub(:)
+            READ(iounit) fmassfrac(:,:)
+            READ(iounit) cbaseflux(:,:)
+            READ(iounit) cbasefluxn(:,:,:)
+            READ(iounit) tconv(:)
+            READ(iounit) qconv(:)
+            READ(iounit) qsconv(:)
+            READ(iounit) psconv, tt2conv, td2conv
+            READ(iounit) nconvlev, nconvtop
+
+
+
+
+
+!            PRINT *, 'SUM(pconv): ', SUM(pconv)
+!            PRINT *, 'SUM(qconv): ', SUM(qconv)
+!            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
+!            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
+!            PRINT *, 'tt2conv: ', tt2conv
+!            PRINT *, 'nconvlev: ', nconvlev
+
+
+
+        ELSE
+            STOP 'fpio_rawbin(): Illegal operation' 
+            
+        ENDIF
+    END SUBROUTINE fpio_rawbin
+
+
+
 
     subroutine handle_nf90_err(status)
 
diff --git a/flexpart_code/fpmetbinary_mod.F90.DEV b/flexpart_code/fpmetbinary_mod.F90.DEV
deleted file mode 100644
index 1cbb4ffc8d0377cea033f4d668975e6fdf04c18e..0000000000000000000000000000000000000000
--- a/flexpart_code/fpmetbinary_mod.F90.DEV
+++ /dev/null
@@ -1,3474 +0,0 @@
-MODULE fpmetbinary_mod
-
-  !*****************************************************************************
-  !                                                                            *
-  !     Contains data and routines for dumping and loading processed met       *
-  !     fields.                                                                *
-  !     Authors Don Morton (Don.Morton@borealscicomp.com)                      *
-  !             Delia Arnold (deliona.arnold@gmail.com)                        *
-  !                                                                            *
-  !     07 Oct 2016                                                            *
-  !                                                                            *
-  !     Most of the data structures from com_mod.f90 that are dumped and       *
-  !     loaded have a final dimension of size two, so that they may hold data  *
-  !     from two met files.  When we dump the contents into a .fp file, we     *
-  !     need to specify which of the two to dump.  Likewise, when we load      *
-  !     from a .fp file, we need to specify which of the two possible indices  *
-  !     to load into.                                                          *
-  !                                                                            *
-  !     Note that these routines need more robustness.  For example, what      *
-  !     what happens if the filename can't be read or written.  Or, what       *
-  !     happens if a read or write fails in any way.  Right now, it's crash    *
-  !     city.                                                                  *
-  !                                                                            *
-  !     Recent enhancements (07 Oct 2016) DJM:                                 *
-  !                                                                            *
-  !     - file format changed so that compiled dimensions are output, and      *
-  !       during input these same dimensions are compared with the dimensions  *
-  !       compiled into the flexpart that is reading it.  A discrepancy        *
-  !       causes abort, so that time isn't wasted reading an incompatible      *
-  !       file.                                                                *
-  !                                                                            *
-  !     - file format changed so that first item is an 8-character string      *
-  !       depicting the version of the preprocessed file format.               *
-  !       An inconsistency between a detected and expected string results      *
-  !       in program abort.                                                    *
-  !                                                                            *
-  !       *** IMPORTANT *** - when the format of the preprocessed output is    *
-  !       modified in any way, be sure to change the version string below,     *
-  !       PREPROC_FORMAT_VERSION_STR, so that attempts to read the output      *
-  !       with a different format version will cause an abort.                 *
-  !                                                                            *
-  !*****************************************************************************
-
-    USE com_mod
-    USE conv_mod
-    USE par_mod, ONLY : nxmax, nymax, nzmax, nuvzmax, nwzmax, numclass, maxspec, &
-&                       maxnests, nxmaxn, nymaxn
-
-    USE netcdf
-
-    IMPLICIT NONE
-
-    ! Users may want to change these IO Unit values if they conflict with other parts
-    ! of code
-    INTEGER, PARAMETER :: IOUNIT_DUMP = 33, IOUNIT_LOAD = 34, &
-                          IOUNIT_TEXTOUT = 35
-
-    ! When a change is made to the format of the preprocessed file, such that
-    ! this routine will not be able to read a previous version, this version
-    ! string should be modified
-    CHARACTER(LEN=12), PARAMETER :: PREPROC_FORMAT_VERSION_STR = 'FP_p-9.3.1'//char(0)
-
-    PRIVATE IOUNIT_DUMP, IOUNIT_LOAD, IOUNIT_TEXTOUT, fpio,    &
-&           PREPROC_FORMAT_VERSION_STR
-
-
-CONTAINS
-
-  !*****************************************************************************
-  !                                                                            *
-  !    Subroutines fpmetbinary_dump() and fpmetbinary_load() provide the       *
-  !    public interface to                                                     *
-  !    this module functionality.  I created the PRIVATE fpio() because I      *
-  !    wanted all interactions with variables to be in one place.  The read    *
-  !    and write operations need to be done in exactly the same sequence, so   *
-  !    I felt like keeping them in the same routine would at least allow for   *
-  !    coders to more easily compare the two sequences than if they were       *
-  !    separate.                                                               *
-  !                                                                            *
-  !    As mentioned above, the dumps and loads will, for most variables,       *
-  !    need to refer to one of two index values for the last dimension of      *
-  !    the array.                                                              *
-  !                                                                            *
-  !*****************************************************************************
-
-
-    SUBROUTINE fpmetbinary_dump(filename, cm_index)
-        CHARACTER(LEN=*), INTENT(IN) :: filename  ! Full path for file
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
-
-        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
-
-        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
-
-        ! Create and open NC4 file for writing
-        PRINT *, 'Opening NC4 file...'
-        ncretval = nf90_create(filename // ".nc4", &
-&                              OR(NF90_CLOBBER, NF90_HDF5), &
-&                              ncid)
-
-
-#ifdef RAWBIN
-        OPEN(IOUNIT_DUMP, file=filename, action='WRITE', status='REPLACE', form="unformatted", access="stream")
-#endif
-
-
-
-
-
-        CALL fpio(IOUNIT_DUMP, ncid, 'DUMP', cm_index)
-
-#ifdef RAWBIN
-        CLOSE(IOUNIT_DUMP)
-#endif
-
-        PRINT *, 'Closing NC4 file...'
-        ncretval = nf90_close(ncid)
-
-        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
-
-        !PRINT *, 'Dump walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
-    END SUBROUTINE fpmetbinary_dump
-
-    SUBROUTINE fpmetbinary_load(filename, cm_index)
-        CHARACTER(LEN=*), INTENT(IN) :: filename  ! Full path for file
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
-
-        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
-
-        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
-
-PRINT *, "filename: ", filename
-PRINT *, "Opening nc file for reading: ", filename // ".nc4"
-        ncretval = nf90_open(filename // ".nc4", NF90_NOWRITE, ncid)
-        call handle_nf90_err(ncretval)
-PRINT *, 'OPENED NC4 FILE FOR READING...'
-
-
-
-#ifdef RAWBIN
-        OPEN(IOUNIT_LOAD, file=filename, action='READ', status='OLD', form="unformatted", access="stream")
-#endif
-
-        CALL fpio(IOUNIT_LOAD, ncid, 'LOAD', cm_index)
-
-#ifdef RAWBIN
-        CLOSE(IOUNIT_LOAD)
-#endif
-
-
-        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
-        !PRINT *, 'Load walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
-    END SUBROUTINE fpmetbinary_load
-
-    SUBROUTINE fpmetbinary_zero(cm_index)
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-
-        ! Zeroes out, in local datastructures, the values dumped/loaded
-        ! This was written primarily as a testing mechanism.
-        ! DJM -- 17 February 2017 -- I don't think this routine has been used
-        ! for anything in recent past.  Might want to consider 86'ing it.
-        ! The lines here correspond to READ and WRITE in the dump/load routines
-
-        ! Scalar values
-        nx=0.0; ny=0.0; nxmin1=0.0; nymin1=0.0; nxfield=0.0
-        nuvz=0.0; nwz=0.0; nz=0.0; nmixz=0.0; nlev_ec=0.0
-        dx=0.0; dy=0.0; xlon0=0.0; ylat0=0.0; dxconst=0.0; dyconst=0.0
-
-        ! Fixed fields, static in time
-        oro=0.0; excessoro=0.0; lsm=0.0; xlanduse=0.0; height=0.0
-
-        ! 3d fields
-        uu(:,:,:,cm_index) = 0.0
-        vv(:,:,:,cm_index) = 0.0
-        uupol(:,:,:,cm_index) = 0.0
-        vvpol(:,:,:,cm_index) = 0.0
-        ww(:,:,:,cm_index) = 0.0
-        tt(:,:,:,cm_index) = 0.0
-        qv(:,:,:,cm_index) = 0.0
-        pv(:,:,:,cm_index) = 0.0
-        rho(:,:,:,cm_index) = 0.0
-        drhodz(:,:,:,cm_index) = 0.0
-        tth(:,:,:,cm_index) = 0.0
-        qvh(:,:,:,cm_index) = 0.0
-        pplev(:,:,:,cm_index) = 0.0
-        clouds(:,:,:,cm_index) = 0.0
-        cloudsh(:,:,cm_index) = 0.0
-
-        ! 2d fields
-        ps(:,:,:,cm_index) = 0.0
-        sd(:,:,:,cm_index) = 0.0
-        msl(:,:,:,cm_index) = 0.0
-        tcc(:,:,:,cm_index) = 0.0
-        u10(:,:,:,cm_index) = 0.0
-        v10(:,:,:,cm_index) = 0.0
-        tt2(:,:,:,cm_index) = 0.0
-        td2(:,:,:,cm_index) = 0.0
-        lsprec(:,:,:,cm_index) = 0.0
-        convprec(:,:,:,cm_index) = 0.0
-        sshf(:,:,:,cm_index) = 0.0
-        ssr(:,:,:,cm_index) = 0.0
-        surfstr(:,:,:,cm_index) = 0.0
-        ustar(:,:,:,cm_index) = 0.0
-        wstar(:,:,:,cm_index) = 0.0
-        hmix(:,:,:,cm_index) = 0.0
-        tropopause(:,:,:,cm_index) = 0.0
-        oli(:,:,:,cm_index) = 0.0
-        diffk(:,:,:,cm_index) = 0.0
-        vdep(:,:,:,cm_index) = 0.0
-
-        ! 1d fields
-        z0(:) = 0.0
-        akm(:) = 0.0
-        bkm(:) = 0.0
-        akz(:) = 0.0
-        bkz(:) = 0.0
-        aknew(:) = 0.0
-        bknew(:) = 0.0
-
-        ! Nested, scalar values (for each nest)
-        nxn(:) = 0.0
-        nyn(:) = 0.0
-        dxn(:) = 0.0
-        dyn(:) = 0.0
-        xlon0n(:) = 0.0
-        ylat0n(:) = 0.0
-
-        ! Nested fields, static in time
-        oron=0.0; excessoron=0.0; lsmn=0.0; xlandusen=0.0
-
-        ! 3d nested fields
-        uun(:,:,:,cm_index,:) = 0.0
-        wwn(:,:,:,cm_index,:) = 0.0
-        ttn(:,:,:,cm_index,:) = 0.0
-        qvn(:,:,:,cm_index,:) = 0.0
-        pvn(:,:,:,cm_index,:) = 0.0
-        cloudsn(:,:,:,cm_index,:) = 0.0
-        cloudsnh(:,:,cm_index,:) = 0.0
-        rhon(:,:,:,cm_index,:) = 0.0
-        drhodzn(:,:,:,cm_index,:) = 0.0
-        tthn(:,:,:,cm_index,:) = 0.0
-        qvhn(:,:,:,cm_index,:) = 0.0
-
-        ! 2d nested fields
-        psn(:,:,:,cm_index,:) = 0.0
-        sdn(:,:,:,cm_index,:) = 0.0
-        msln(:,:,:,cm_index,:) = 0.0
-        tccn(:,:,:,cm_index,:) = 0.0
-        u10n(:,:,:,cm_index,:) = 0.0
-        v10n(:,:,:,cm_index,:) = 0.0
-        tt2n(:,:,:,cm_index,:) = 0.0
-        td2n(:,:,:,cm_index,:) = 0.0
-        lsprecn(:,:,:,cm_index,:) = 0.0
-        convprecn(:,:,:,cm_index,:) = 0.0
-        sshfn(:,:,:,cm_index,:) = 0.0
-        ssrn(:,:,:,cm_index,:) = 0.0
-        surfstrn(:,:,:,cm_index,:) = 0.0
-        ustarn(:,:,:,cm_index,:) = 0.0
-        wstarn(:,:,:,cm_index,:) = 0.0
-        hmixn(:,:,:,cm_index,:) = 0.0
-        tropopausen(:,:,:,cm_index,:) = 0.0
-        olin(:,:,:,cm_index,:) = 0.0
-        diffkn(:,:,:,cm_index,:) = 0.0
-        vdepn(:,:,:,cm_index,:) = 0.0
-
-        ! Auxiliary variables for nests
-        xresoln(:) = 0.0
-        yresoln(:) = 0.0
-        xln(:) = 0.0
-        yln(:) = 0.0
-        xrn(:) = 0.0
-        yrn(:) = 0.0
-
-        ! Variables for polar stereographic projection
-        xglobal=.FALSE.; sglobal=.FALSE.; nglobal=.FALSE.
-        switchnorthg=0.0; switchsouthg=0.0
-        southpolemap(:) = 0.0
-        northpolemap(:) = 0.0
-
-        ! Variables declared in conv_mod (convection)
-        pconv(:) = 0.0
-        phconv(:) = 0.0
-        dpr(:) = 0.0
-        pconv_hpa(:) = 0.0
-        phconv_hpa(:) = 0.0
-        ft(:) = 0.0
-        fq(:) = 0.0
-        fmass(:,:) = 0.0
-        sub(:) = 0.0
-        fmassfrac(:,:) = 0.0
-        cbaseflux(:,:) = 0.0
-        cbasefluxn(:,:,:) = 0.0
-        tconv(:) = 0.0
-        qconv(:) = 0.0
-        qsconv(:) = 0.0
-        psconv=0.0; tt2conv=0.0; td2conv=0.0
-        nconvlev=0.0; nconvtop=0.0
-
-    END SUBROUTINE fpmetbinary_zero
-
-    SUBROUTINE fpio(iounit, ncid, op, cm_index)
-        IMPLICIT NONE
-        INTEGER, INTENT(IN) :: ncid               ! NetCDF file id
-        INTEGER, INTENT(IN) :: iounit
-        CHARACTER(LEN=4), INTENT(IN) :: op        ! Operation - DUMP or LOAD
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-
-        ! Helper functions (in this module)
-        !INTEGER :: logical2integer
-        !LOGICAL :: integer2logical
-
-        INTEGER :: temp_integer   ! temporary value
-        INTEGER :: ncret          ! Return value from NetCDF calls
-        INTEGER :: ncvarid          ! NetCDF variable ID
-
-        INTEGER :: nxmax_dimid, nymax_dimid, nzmax_dimid, nuvzmax_dimid, nwzmax_dimid, &
-&                  maxspec_dimid, numclass_dimid, maxnests_dimid, nxmaxn_dimid, nymaxn_dimid, &
-&                  zero_to_nzmax_dimid, zero_to_maxnests_dimid, polemap_dimid, &
-&                  nconvlevmax_dimid, na_dimid
-
-
-        INTEGER, DIMENSION(1) :: dim1dids    ! Dimension IDs for 1D arrays
-        INTEGER, DIMENSION(2) :: dim2dids    ! Dimension IDs for 2D arrays
-        INTEGER, DIMENSION(3) :: dim3dids    ! Dimension IDs for 3D arrays
-        INTEGER, DIMENSION(4) :: dim4dids    ! Dimension IDs for 4D arrays
-        INTEGER, DIMENSION(5) :: dim5dids    ! Dimension IDs for 5D arrays
-
-
-
-
-        ! These are used when loading in dimensions from NC file
-        CHARACTER(LEN=NF90_MAX_NAME) :: nxmax_dimname, nymax_dimname, nzmax_dimname, &
-&                                       nuvzmax_dimname, nwzmax_dimname,&
-&                                       maxspec_dimname, numclass_dimname,&
-&                                       maxnests_dimname, nxmaxn_dimname, nymaxn_dimname, &
-&                                       zero_to_nzmax_dimname, zero_to_maxnests_dimname, &
-&                                       polemap_dimname, nconvlevmax_dimname, na_dimname
-
-        ! These are temporary variables, used in the LOAD option, for 
-        ! comparing against the current values in FLEXPART of nxmax, nymax, ...
-        INTEGER :: temp_nxmax, temp_nymax, temp_nzmax, &
-&                  temp_nuvzmax, temp_nwzmax, &
-&                  temp_maxspec, temp_numclass,&
-&                  temp_maxnests, temp_nxmaxn, temp_nymaxn
-
-        CHARACTER(LEN=12) :: temp_preproc_format_version_str
-
-        CHARACTER(LEN=128) :: errmesg
-
-        INTEGER, PARAMETER :: DEF_LEVEL = 3
-
-        if (op == 'DUMP') THEN
-
-
-            ! Write the preprocessing format version string
-            !  NEED TO FILL THIS IN FOR NC4
-
-
-#ifdef RAWBIN
-            WRITE (iounit) PREPROC_FORMAT_VERSION_STR
-
-#endif
-
-            ! Write the compiled max dimensions from par_mod - these are
-            ! not meant to be reassigned during a LOAD, but used as "header"
-            ! information to provide the structure of arrays
-
-#ifdef RAWBIN
-            WRITE (iounit) nxmax, nymax, nzmax, nuvzmax, nwzmax
-#endif
-
-
-            ncret = nf90_def_dim(ncid, 'nxmax', nxmax, nxmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nymax', nymax, nymax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nzmax', nzmax, nzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nuvzmax', nuvzmax, nuvzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nwzmax', nwzmax, nwzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'maxspec', maxspec, maxspec_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'numclass', numclass, numclass_dimid)
-            call handle_nf90_err(ncret)
-
-            ! There are a handful of variables indexed from 0 to n, rather than 0 to n-1,
-            ! so these dimensions handle that.  What a pain.
-            ncret = nf90_def_dim(ncid, 'zero_to_nzmax', nzmax+1, zero_to_nzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'zero_to_maxnests', maxnests+1, zero_to_maxnests_dimid)
-            call handle_nf90_err(ncret)
-
-            ! This is for a couple of small arrays that store polar stereographic stuff
-            ncret = nf90_def_dim(ncid, 'polemap_dim', 9, polemap_dimid)
-            call handle_nf90_err(ncret)
-
-            ! These two values come from conv_mod
-            ncret = nf90_def_dim(ncid, 'nconvlevmax_dim', nconvlevmax, nconvlevmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'na_dim', na, na_dimid)
-            call handle_nf90_err(ncret)
-
-            ! Scalar values
-
-
-#ifdef RAWBIN
-            WRITE(iounit) nx, ny, nxmin1, nymin1, nxfield
-            WRITE(iounit) nuvz, nwz, nz, nmixz, nlev_ec
-            WRITE(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
-#endif
-
-            ncret = nf90_def_var(ncid, 'nx', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nx)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ny', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, ny)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nxmin1', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nxmin1)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nymin1', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nymin1)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nxfield', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nxfield)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nuvz', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nuvz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nwz', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nwz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nz', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nmixz', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nmixz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nlev_ec', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nlev_ec)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dx', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, dx)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dy', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, dy)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'xlon0', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, xlon0)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ylat0', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, ylat0)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dxconst', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, dxconst)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dyconst', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, dyconst)
-            call handle_nf90_err(ncret)
-
-
-
-            ! Fixed fields, static in time
-
-
-#ifdef RAWBIN
-            WRITE(iounit) oro, excessoro, lsm, xlanduse, height
-#endif
-
-            dim2dids = (/nxmax_dimid, nymax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'oro', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                oro(0:nxmax-1, 0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'excessoro', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                excessoro(0:nxmax-1, 0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'lsm', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                lsm(0:nxmax-1, 0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            dim3dids = (/nxmax_dimid, nymax_dimid, numclass_dimid/)
-            ! numclass comes from par_mod - number of land use classes
-            ncret = nf90_def_var(ncid, 'xlanduse', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xlanduse(0:nxmax-1, 0:nymax-1, 1:numclass))
-            call handle_nf90_err(ncret)
-
-            dim1dids = (/nzmax_dimid/)
-            ncret = nf90_def_var(ncid, 'height', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                height(1:nzmax))
-            call handle_nf90_err(ncret)
-
-
-
-
-            ! 3d fields
-
-
-
-#ifdef RAWBIN
-            WRITE(iounit) uu(:,:,:,cm_index)
-            WRITE(iounit) vv(:,:,:,cm_index)
-            WRITE(iounit) uupol(:,:,:,cm_index)
-            WRITE(iounit) vvpol(:,:,:,cm_index)
-            WRITE(iounit) ww(:,:,:,cm_index)
-            WRITE(iounit) tt(:,:,:,cm_index)
-            WRITE(iounit) qv(:,:,:,cm_index)
-            WRITE(iounit) pv(:,:,:,cm_index)
-            WRITE(iounit) rho(:,:,:,cm_index)
-            WRITE(iounit) drhodz(:,:,:,cm_index)
-            WRITE(iounit) tth(:,:,:,cm_index)
-            WRITE(iounit) qvh(:,:,:,cm_index)
-            WRITE(iounit) pplev(:,:,:,cm_index)
-            WRITE(iounit) clouds(:,:,:,cm_index)
-            WRITE(iounit) cloudsh(:,:,cm_index)
-#endif
-
-
-
-            dim3dids = (/nxmax_dimid, nymax_dimid, nzmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'uu', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                uu(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'vv', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                vv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'uupol', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                uupol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'vvpol', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                vvpol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ww', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ww(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tt', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'qv', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'pv', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                pv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'rho', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                rho(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'drhodz', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                drhodz(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'clouds', NF90_BYTE, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-            ! Note the change in z dimension for the following
-            dim3dids = (/nxmax_dimid, nymax_dimid, nuvzmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'tth', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tth(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'qvh', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qvh(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'pplev', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                pplev(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-
-            dim2dids = (/nxmax_dimid, nymax_dimid/)
-            ncret = nf90_def_var(ncid, 'cloudsh', NF90_INT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                cloudsh(0:nxmax-1, 0:nymax-1, cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
-&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
-
-            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
-&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
-
-
-
-            ! 2d fields
-
-
-#ifdef RAWBIN
-            WRITE(iounit) ps(:,:,:,cm_index)
-            WRITE(iounit) sd(:,:,:,cm_index)
-            WRITE(iounit) msl(:,:,:,cm_index)
-            WRITE(iounit) tcc(:,:,:,cm_index)
-            WRITE(iounit) u10(:,:,:,cm_index)
-            WRITE(iounit) v10(:,:,:,cm_index)
-            WRITE(iounit) tt2(:,:,:,cm_index)
-            WRITE(iounit) td2(:,:,:,cm_index)
-            WRITE(iounit) lsprec(:,:,:,cm_index)
-            WRITE(iounit) convprec(:,:,:,cm_index)
-            WRITE(iounit) sshf(:,:,:,cm_index)
-            WRITE(iounit) ssr(:,:,:,cm_index)
-            WRITE(iounit) surfstr(:,:,:,cm_index)
-            WRITE(iounit) ustar(:,:,:,cm_index)
-            WRITE(iounit) wstar(:,:,:,cm_index)
-            WRITE(iounit) hmix(:,:,:,cm_index)
-            WRITE(iounit) tropopause(:,:,:,cm_index)
-            WRITE(iounit) oli(:,:,:,cm_index)
-            WRITE(iounit) diffk(:,:,:,cm_index)
-            WRITE(iounit) vdep(:,:,:,cm_index)
-#endif
-
-
-
-            dim2dids = (/nxmax_dimid, nymax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'ps', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ps(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'sd', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                sd(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'msl', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                msl(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tcc', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tcc(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'u10', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                u10(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'v10', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                v10(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tt2', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tt2(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'td2', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                td2(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'lsprec', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                lsprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'convprec', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                convprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'sshf', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                sshf(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ssr', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ssr(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'surfstr', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                surfstr(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ustar', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ustar(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'wstar', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                wstar(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'hmix', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                hmix(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tropopause', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tropopause(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'oli', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                oli(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'diffk', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                diffk(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
-&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
-
-            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
-&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
-
-
-            dim3dids = (/nxmax_dimid, nymax_dimid, maxspec_dimid/)
-
-            ncret = nf90_def_var(ncid, 'vdep', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                vdep(0:nxmax-1, 0:nymax-1, 1:maxspec, cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-            ! 1d fields
-
-
-
-#ifdef RAWBIN
-            WRITE(iounit) z0(:)
-            WRITE(iounit) akm(:)
-            WRITE(iounit) bkm(:)
-            WRITE(iounit) akz(:)
-            WRITE(iounit) bkz(:)
-            WRITE(iounit) aknew(:)
-            WRITE(iounit) bknew(:)
-#endif
-
-            dim1dids = (/numclass_dimid/)
-
-            ncret = nf90_def_var(ncid, 'z0', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                z0(1:numclass))
-
-
-            dim1dids = (/nwzmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'akm', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                akm(1:nwzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'bkm', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                bkm(1:nwzmax))
-            call handle_nf90_err(ncret)
-
-
-            dim1dids = (/nuvzmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'akz', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                akz(1:nuvzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'bkz', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                bkz(1:nuvzmax))
-            call handle_nf90_err(ncret)
-
-
-            dim1dids = (/nzmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'aknew', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                aknew(1:nzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'bknew', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                bknew(1:nzmax))
-            call handle_nf90_err(ncret)
-
-
-            PRINT *, 'SUM(bknew(1:nzmax)): ', &
-&                                        SUM(bknew(1:nzmax))
-
-
-
-            ! Getting ready to add in nested code
-
-            ! These are compiled max dimensions from par_mod - these are
-            ! not meant to be reassigned during a LOAD, but used as "header"
-            ! information to provide the structure of arrays
-            ncret = nf90_def_dim(ncid, 'maxnests', maxnests, maxnests_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nxmaxn', nxmaxn, nxmaxn_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nymaxn', nymaxn, nymaxn_dimid)
-            call handle_nf90_err(ncret)
-
-
-#ifdef RAWBIN
-            WRITE(iounit) nxn(:)
-            WRITE(iounit) nyn(:)
-            WRITE(iounit) dxn(:)
-            WRITE(iounit) dyn(:)
-            WRITE(iounit) xlon0n(:)
-            WRITE(iounit) ylat0n(:)
-#endif
-
-            ! Nested, scalar values (for each nest)
-
-            dim1dids = (/maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'nxn', NF90_INT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                nxn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nyn', NF90_INT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                nyn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dxn', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                dxn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dyn', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                dyn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'xlon0n', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xlon0n(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ylat0n', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ylat0n(1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-
-            ! Nested fields, static over time
-            WRITE(iounit) oron, excessoron, lsmn, xlandusen 
-
-            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'oron', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                oron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'excessoron', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                excessoron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'lsmn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                lsmn(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, numclass_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'xlandusen', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xlandusen(0:nxmaxn-1, 0:nymaxn-1, 1:numclass, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            PRINT *, 'SUM(oron): ', SUM(oron)
-
-
-
-            ! 3d nested fields
-
-
-
-#ifdef RAWBIN
-            WRITE(iounit) uun(:,:,:,cm_index,:)
-            WRITE(iounit) vvn(:,:,:,cm_index,:)
-            WRITE(iounit) wwn(:,:,:,cm_index,:)
-            WRITE(iounit) ttn(:,:,:,cm_index,:)
-            WRITE(iounit) qvn(:,:,:,cm_index,:)
-            WRITE(iounit) pvn(:,:,:,cm_index,:)
-            WRITE(iounit) cloudsn(:,:,:,cm_index,:)
-            WRITE(iounit) cloudsnh(:,:,cm_index,:)
-            WRITE(iounit) rhon(:,:,:,cm_index,:)
-            WRITE(iounit) drhodzn(:,:,:,cm_index,:)
-            WRITE(iounit) tthn(:,:,:,cm_index,:)
-            WRITE(iounit) qvhn(:,:,:,cm_index,:)
-#endif
-
-            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nzmax_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'uun', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                uun(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'vvn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                vvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'wwn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                wwn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ttn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ttn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'qvn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'pvn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                pvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'rhon', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                rhon(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'drhodzn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                drhodzn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-            ! Note the new dimensions
-            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nuvzmax_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'tthn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tthn(0:nxmaxn-1, 0:nymaxn-1, 1:nuvzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'qvhn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qvhn(0:nxmaxn-1, 0:nymaxn-1, 1:nuvzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ! Note the new dimensions
-            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, zero_to_nzmax_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'cloudsn', NF90_INT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                cloudsn(0:nxmaxn-1, 0:nymaxn-1, 0:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ! Note the new dimensions
-            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'cloudsnh', NF90_INT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                cloudsnh(0:nxmaxn-1, 0:nymaxn-1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-
-
-
-
-
-
-            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
-            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
-
-
-
-            ! 2d nested fields
-
-
-#ifdef RAWBIN
-            WRITE(iounit) psn(:,:,:,cm_index,:)
-            WRITE(iounit) sdn(:,:,:,cm_index,:)
-            WRITE(iounit) msln(:,:,:,cm_index,:)
-            WRITE(iounit) tccn(:,:,:,cm_index,:)
-            WRITE(iounit) u10n(:,:,:,cm_index,:)
-            WRITE(iounit) v10n(:,:,:,cm_index,:)
-            WRITE(iounit) tt2n(:,:,:,cm_index,:)
-            WRITE(iounit) td2n(:,:,:,cm_index,:)
-            WRITE(iounit) lsprecn(:,:,:,cm_index,:)
-            WRITE(iounit) convprecn(:,:,:,cm_index,:)
-            WRITE(iounit) sshfn(:,:,:,cm_index,:)
-            WRITE(iounit) ssrn(:,:,:,cm_index,:)
-            WRITE(iounit) surfstrn(:,:,:,cm_index,:)
-            WRITE(iounit) ustarn(:,:,:,cm_index,:)
-            WRITE(iounit) wstarn(:,:,:,cm_index,:)
-            WRITE(iounit) hmixn(:,:,:,cm_index,:)
-            WRITE(iounit) tropopausen(:,:,:,cm_index,:)
-            WRITE(iounit) olin(:,:,:,cm_index,:)
-            WRITE(iounit) diffkn(:,:,:,cm_index,:)
-            WRITE(iounit) vdepn(:,:,:,cm_index,:)
-#endif
-
-
-            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'psn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                psn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'sdn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                sdn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'msln', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                msln(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tccn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tccn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'u10n', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                u10n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'v10n', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                v10n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tt2n', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tt2n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'td2n', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                td2n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'lsprecn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                lsprecn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'convprecn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                convprecn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'sshfn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                sshfn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ssrn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ssrn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'surfstrn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                surfstrn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ustarn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ustarn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'wstarn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                wstarn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'hmixn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                hmixn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tropopausen', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tropopausen(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'olin', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                olin(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'diffkn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                diffkn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, maxspec_dimid, maxnests_dimid/)
-
-
-
-            ncret = nf90_def_var(ncid, 'vdepn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                vdepn(0:nxmaxn-1, 0:nymaxn-1, 1:maxspec, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
-
-
-
-
-
-            ! Auxiliary variables for nests
-
-#ifdef RAWBIN
-            WRITE(iounit) xresoln(:)
-            WRITE(iounit) yresoln(:)
-            WRITE(iounit) xln(:)
-            WRITE(iounit) yln(:)
-            WRITE(iounit) xrn(:)
-            WRITE(iounit) yrn(:)
-#endif
-
-
-            dim1dids = (/zero_to_maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'xresoln', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xresoln(0:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'yresoln', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                yresoln(0:maxnests))
-            call handle_nf90_err(ncret)
-
-            dim1dids = (/maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'xln', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xln(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'yln', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                yln(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'xrn', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xrn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'yrn', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                yrn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
-            PRINT *, 'SUM(xrn): ', SUM(xrn)
-
-
-
-            ! Variables for polar stereographic projection
-
-
-
-#ifdef RAWBIN
-            WRITE(iounit) xglobal, sglobal, nglobal
-            WRITE(iounit) switchnorthg, switchsouthg
-            WRITE(iounit) southpolemap(:)
-            WRITE(iounit) northpolemap(:)
-#endif
-
-
-            dim1dids = (/polemap_dimid/)
-
-            ncret = nf90_def_var(ncid, 'southpolemap', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                southpolemap(:))
-
-            ncret = nf90_def_var(ncid, 'northpolemap', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                northpolemap(:))
-
-
-
-            ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
-            ! to INTEGER for NetCDF storage
-            ncret = nf90_def_var(ncid, 'xglobal', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, logical2integer(xglobal))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'sglobal', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, logical2integer(sglobal))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nglobal', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, logical2integer(nglobal))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'switchnorthg', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, switchnorthg)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'switchsouthg', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, switchsouthg)
-            call handle_nf90_err(ncret)
-
-
-
-            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
-            PRINT *, 'xglobal: ', xglobal
-            PRINT *, 'sglobal: ', sglobal
-            PRINT *, 'nglobal: ', nglobal
-            PRINT *, 'switchsouthg: ', switchsouthg
-
-            ! Variables declared in conv_mod (convection)
-
-
-#ifdef RAWBIN
-            WRITE(iounit) pconv(:)
-            WRITE(iounit) phconv(:)
-            WRITE(iounit) dpr(:)
-            WRITE(iounit) pconv_hpa(:)
-            WRITE(iounit) phconv_hpa(:)
-            WRITE(iounit) ft(:)
-            WRITE(iounit) fq(:)
-            WRITE(iounit) fmass(:,:)
-            WRITE(iounit) sub(:)
-            WRITE(iounit) fmassfrac(:,:)
-            WRITE(iounit) cbaseflux(:,:)
-            WRITE(iounit) cbasefluxn(:,:,:)
-            WRITE(iounit) tconv(:)
-            WRITE(iounit) qconv(:)
-            WRITE(iounit) qsconv(:)
-            WRITE(iounit) psconv, tt2conv, td2conv
-            WRITE(iounit) nconvlev, nconvtop
-#endif
-
-
-            dim1dids = (/nconvlevmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'pconv', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                pconv(:))
-
-            ncret = nf90_def_var(ncid, 'dpr', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                dpr(:))
-
-            ncret = nf90_def_var(ncid, 'pconv_hpa', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                pconv_hpa(:))
-
-            ncret = nf90_def_var(ncid, 'ft', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ft(:))
-
-            ncret = nf90_def_var(ncid, 'fq', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                fq(:))
-
-            ncret = nf90_def_var(ncid, 'sub', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                sub(:))
-
-            dim1dids = (/na_dimid/)
-
-            ncret = nf90_def_var(ncid, 'phconv', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                phconv(:))
-
-            ncret = nf90_def_var(ncid, 'phconv_hpa', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                phconv_hpa(:))
-
-            ncret = nf90_def_var(ncid, 'tconv', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tconv(:))
-
-            ncret = nf90_def_var(ncid, 'qconv', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qconv(:))
-
-            ncret = nf90_def_var(ncid, 'qsconv', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qsconv(:))
-
-            ! New dimensions
-            dim2dids = (/nconvlevmax_dimid, nconvlevmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'fmass', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                fmass(:,:))
-
-            ncret = nf90_def_var(ncid, 'fmassfrac', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                fmassfrac(:,:))
-
-
-            ! New dimensions
-            dim2dids = (/nxmax_dimid, nymax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'cbaseflux', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                cbaseflux(0:nxmax-1,0:nymax-1))
-
-            ! New dimensions
-            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'cbasefluxn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                cbasefluxn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
-
-
-            ! Scalars
-            ncret = nf90_def_var(ncid, 'psconv', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, psconv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tt2conv', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, tt2conv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'td2conv', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, td2conv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nconvlev', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nconvlev)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nconvtop', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nconvtop)
-            call handle_nf90_err(ncret)
-
-            PRINT *, 'SUM(pconv): ', SUM(pconv)
-            PRINT *, 'SUM(qconv): ', SUM(qconv)
-            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
-            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
-            PRINT *, 'tt2conv: ', tt2conv
-            PRINT *, 'nconvlev: ', nconvlev
-
-
-
-        ELSE IF (op == 'LOAD') THEN 
-
-            ! Read the preprocessed format version string and insure it
-            ! matches this version
-
-
-#ifdef RAWBIN
-            READ (iounit) temp_preproc_format_version_str
-            PRINT *, 'Reading preprocessed file format version: ', &
-&                    temp_preproc_format_version_str
-
-            IF (TRIM(temp_preproc_format_version_str) == &
-&                                        TRIM(PREPROC_FORMAT_VERSION_STR)) THEN
-                CONTINUE
-            ELSE
-                ! PRINT *, ''  GK: causes relocation truncated to fit: R_X86_64_32
-                PRINT *, 'Inconsistent preprocessing format version'
-                PRINT *, 'Expected Version: ', PREPROC_FORMAT_VERSION_STR
-                PRINT *, 'Detected Version: ', temp_preproc_format_version_str
-                ! PRINT *, ''
-                STOP
-            END IF
-#endif
-
-
-
-
-            ! Read the compiled max dimensions that were dumped from par_mod 
-            ! when creating the fp file, so that we can compare against
-            ! current FLEXPART dimensions - they need to be the same, or else
-            ! we abort.
-
-
-
-#ifdef RAWBIN
-            READ (iounit) temp_nxmax, temp_nymax, temp_nzmax, &
-&                         temp_nuvzmax, temp_nwzmax
-#endif
-
-
-
-
-PRINT *, 'GET DIMENSIONS'
-            ! Get dimensions
-            ncret = nf90_inq_dimid(ncid, 'nxmax', nxmax_dimid)
-            call handle_nf90_err(ncret)
-PRINT *, 'GOT nxmax_dimid'            
-            ncret = nf90_inquire_dimension(ncid, nxmax_dimid, nxmax_dimname, &
-&                                                temp_nxmax)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nxmax: ', temp_nxmax
-
-PRINT *, 'GOT temp_nxmax'
-
-            ncret = nf90_inq_dimid(ncid, 'nymax', nymax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nymax_dimid, nymax_dimname, &
-&                                                temp_nymax)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nymax: ', temp_nymax
-
-            ncret = nf90_inq_dimid(ncid, 'nzmax', nzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nzmax_dimid, nzmax_dimname, &
-&                                                temp_nzmax)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nzmax: ', temp_nzmax
-
-            ncret = nf90_inq_dimid(ncid, 'nuvzmax', nuvzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nuvzmax_dimid, nuvzmax_dimname, &
-&                                                temp_nuvzmax)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nuvzmax: ', temp_nuvzmax
-
-            ncret = nf90_inq_dimid(ncid, 'nwzmax', nwzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nwzmax_dimid, nwzmax_dimname, &
-&                                                temp_nwzmax)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nwzmax: ', temp_nwzmax
-
-            ncret = nf90_inq_dimid(ncid, 'numclass', numclass_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, numclass_dimid, numclass_dimname, &
-&                                                temp_numclass)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_numclass: ', temp_numclass
-
-            ncret = nf90_inq_dimid(ncid, 'maxspec', maxspec_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, maxspec_dimid, maxspec_dimname, &
-&                                                temp_maxspec)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_maxspec: ', temp_maxspec
-
-
-
-PRINT *, 'CHECK DIMENSIONS'
-
-            IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. &
-&                   (temp_nzmax == nzmax) .AND. &
-&                   (temp_nuvzmax == nuvzmax) .AND. &
-&                   (temp_nwzmax == nwzmax) .AND. &
-&                   (temp_numclass == numclass) .AND. &
-&                   (temp_maxspec == maxspec) ) THEN
-                CONTINUE
-            ELSE
-                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
-                ! PRINT *, ''
-                PRINT *, '                  FP file     Compiled FP'
-                PRINT *, 'nxmax:     ', temp_nxmax, '    ', nxmax 
-                PRINT *, 'nymax:     ', temp_nymax, '    ', nymax 
-                PRINT *, 'nzmax:     ', temp_nzmax, '    ', nzmax 
-                PRINT *, 'nuvzmax:     ', temp_nuvzmax, '    ', nuvzmax 
-                PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax
-                PRINT *, 'numclass:     ', temp_numclass, '    ', numclass
-                PRINT *, 'maxspec:     ', temp_maxspec, '    ', maxspec
-                ! PRINT *, ''
-                STOP
-            END IF
-
-
-
-
-            ! Scalar values
-
-
-#ifdef RAWBIN
-            READ(iounit) nx, ny, nxmin1, nymin1, nxfield
-            READ(iounit) nuvz, nwz, nz, nmixz, nlev_ec
-            READ(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
-#endif
-
-
-
-
-PRINT *, 'GET SCALARS'
-
-            ! Get the varid , then read into scalar variable
-            ncret = nf90_inq_varid(ncid, 'nx', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nx)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ny', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ny)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nxmin1', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nxmin1)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nymin1', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nymin1)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nxfield', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nxfield)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nuvz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nuvz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nwz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nwz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nmixz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nmixz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nlev_ec', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nlev_ec)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dx', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dx)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dy', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dy)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xlon0', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xlon0)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ylat0', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ylat0)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dxconst', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dxconst)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dyconst', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dyconst)
-            call handle_nf90_err(ncret)
-
-
-
-
-
-
-            ! Fixed fields, static in time
-            
-#ifdef RAWBIN            
-            READ(iounit) oro, excessoro, lsm, xlanduse, height
-#endif
-
-            ncret = nf90_inq_varid(ncid, 'oro', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, oro(0:nxmax-1,0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'excessoro', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, excessoro(0:nxmax-1,0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'lsm', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, lsm(0:nxmax-1,0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xlanduse', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xlanduse(0:nxmax-1,0:nymax-1, 1:numclass))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'height', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, height(1:nzmax))
-            call handle_nf90_err(ncret)
-
-
-
-
-            ! 3d fields
-
-
-
-#ifdef RAWBIN
-            READ(iounit) uu(:,:,:,cm_index)
-            READ(iounit) vv(:,:,:,cm_index)
-            READ(iounit) uupol(:,:,:,cm_index)
-            READ(iounit) vvpol(:,:,:,cm_index)
-            READ(iounit) ww(:,:,:,cm_index)
-            READ(iounit) tt(:,:,:,cm_index)
-            READ(iounit) qv(:,:,:,cm_index)
-            READ(iounit) pv(:,:,:,cm_index)
-            READ(iounit) rho(:,:,:,cm_index)
-            READ(iounit) drhodz(:,:,:,cm_index)
-            READ(iounit) tth(:,:,:,cm_index)
-            READ(iounit) qvh(:,:,:,cm_index)
-            READ(iounit) pplev(:,:,:,cm_index)
-            READ(iounit) clouds(:,:,:,cm_index)
-            READ(iounit) cloudsh(:,:,cm_index)
-#endif
-
-
-
-            ! Get the varid and read the variable into the array
-            ncret = nf90_inq_varid(ncid, 'uu', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, uu(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'vv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, vv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'uupol', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, uupol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'vvpol', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, vvpol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ww', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ww(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tt', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tt(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'pv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, pv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'rho', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, rho(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'drhodz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, drhodz(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'clouds', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, clouds(0:nxmax-1,0:nzmax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tth', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tth(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qvh', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qvh(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'pplev', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, pplev(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'cloudsh', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, cloudsh(0:nxmax-1,0:nymax-1,cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
-&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
-
-
-            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
-&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
-
-
-
-            ! 2d fields
-
-
-#ifdef RAWBIN
-            READ(iounit) ps(:,:,:,cm_index)
-            READ(iounit) sd(:,:,:,cm_index)
-            READ(iounit) msl(:,:,:,cm_index)
-            READ(iounit) tcc(:,:,:,cm_index)
-            READ(iounit) u10(:,:,:,cm_index)
-            READ(iounit) v10(:,:,:,cm_index)
-            READ(iounit) tt2(:,:,:,cm_index)
-            READ(iounit) td2(:,:,:,cm_index)
-            READ(iounit) lsprec(:,:,:,cm_index)
-            READ(iounit) convprec(:,:,:,cm_index)
-            READ(iounit) sshf(:,:,:,cm_index)
-            READ(iounit) ssr(:,:,:,cm_index)
-            READ(iounit) surfstr(:,:,:,cm_index)
-            READ(iounit) ustar(:,:,:,cm_index)
-            READ(iounit) wstar(:,:,:,cm_index)
-            READ(iounit) hmix(:,:,:,cm_index)
-            READ(iounit) tropopause(:,:,:,cm_index)
-            READ(iounit) oli(:,:,:,cm_index)
-            READ(iounit) diffk(:,:,:,cm_index)
-            READ(iounit) vdep(:,:,:,cm_index)
-#endif
-
-
-
-            ! Get the varid and read the variable into the array
-            ncret = nf90_inq_varid(ncid, 'ps', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ps(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'sd', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, sd(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'msl', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, msl(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tcc', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tcc(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'u10', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, u10(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'v10', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, v10(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tt2', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tt2(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'td2', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, td2(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'lsprec', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, lsprec(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'convprec', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, convprec(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'sshf', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, sshf(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ssr', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ssr(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'surfstr', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, surfstr(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ustar', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ustar(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'wstar', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, wstar(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'hmix', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, hmix(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tropopause', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tropopause(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'oli', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, oli(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'diffk', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, diffk(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
-&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
-
-            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
-&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
-
-
-            ncret = nf90_inq_varid(ncid, 'vdep', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, vdep(0:nxmax-1,0:nymax-1,1:maxspec, cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-
-
-            ! 1d fields
-
-#ifdef RAWBIN
-            READ(iounit) z0(:)
-            READ(iounit) akm(:)
-            READ(iounit) bkm(:)
-            READ(iounit) akz(:)
-            READ(iounit) bkz(:)
-            READ(iounit) aknew(:)
-            READ(iounit) bknew(:)
-#endif
-
-            ncret = nf90_inq_varid(ncid, 'z0', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, z0(1:numclass))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'akm', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, akm(1:nwzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'bkm', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, bkm(1:nwzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'akz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, akz(1:nuvzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'bkz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, bkz(1:nuvzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'aknew', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, aknew(1:nzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'bknew', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, bknew(1:nzmax))
-            call handle_nf90_err(ncret)
-
-
-
-            PRINT *, 'SUM(bknew(1:nzmax)): ', &
-&                                        SUM(bknew(1:nzmax))
-
-
-
-
-            ! Now the nested input grid variables
-            ! Get the compiled values that were written into the FP file, and
-            ! make sure they are equal to the current compiled values, to make
-            ! sure we are working with consistent arrays
-            ncret = nf90_inq_dimid(ncid, 'maxnests', maxnests_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, maxnests_dimid, maxnests_dimname, &
-&                                                temp_maxnests)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_maxnests: ', temp_maxnests
-
-            ncret = nf90_inq_dimid(ncid, 'nxmaxn', nxmaxn_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nxmaxn_dimid, nxmaxn_dimname, &
-&                                                temp_nxmaxn)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nxmaxn: ', temp_nxmaxn
-
-            ncret = nf90_inq_dimid(ncid, 'nymaxn', nymaxn_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nymaxn_dimid, nymaxn_dimname, &
-&                                                temp_nymaxn)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nymaxn: ', temp_nymaxn
-
-            ! Note that maxspec_dimid and numclass_dimid were checked above
-
-
-
-
-            IF ( (temp_nxmaxn == nxmaxn) .AND. (temp_nymaxn == nymaxn) .AND. &
-&                   (temp_maxnests == maxnests) ) THEN
-                CONTINUE
-            ELSE
-                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
-                ! PRINT *, ''
-                PRINT *, '                  FP file     Compiled FP'
-                PRINT *, 'nxmaxn:     ', temp_nxmaxn, '    ', nxmaxn
-                PRINT *, 'nymaxn:     ', temp_nymaxn, '    ', nymaxn
-                PRINT *, 'maxnests:     ', temp_maxnests, '    ', maxnests
-                STOP
-            END IF
-
-
-
-            ! Nested, scalar values (for each nest)
-
-
-
-
-#ifdef RAWBIN
-            READ(iounit) nxn(:)
-            READ(iounit) nyn(:)
-            READ(iounit) dxn(:)
-            READ(iounit) dyn(:)
-            READ(iounit) xlon0n(:)
-            READ(iounit) ylat0n(:)
-#endif
-
-
-            ncret = nf90_inq_varid(ncid, 'nxn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nxn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nyn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nyn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dxn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dxn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dyn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dyn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xlon0n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xlon0n(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ylat0n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ylat0n(1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-            ! Nested fields, static over time
-            READ(iounit) oron, excessoron, lsmn, xlandusen 
-
-            ncret = nf90_inq_varid(ncid, 'oron', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, oron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'excessoron', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, excessoron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'lsmn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, lsmn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xlandusen', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xlandusen(0:nxmaxn-1,0:nymaxn-1,1:numclass,1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-            PRINT *, 'SUM(oron): ', SUM(oron)
-
-
-
-
-            ! 3d nested fields
-
-#ifdef RAWBIN
-            READ(iounit) uun(:,:,:,cm_index,:)
-            READ(iounit) vvn(:,:,:,cm_index,:)
-            READ(iounit) wwn(:,:,:,cm_index,:)
-            READ(iounit) ttn(:,:,:,cm_index,:)
-            READ(iounit) qvn(:,:,:,cm_index,:)
-            READ(iounit) pvn(:,:,:,cm_index,:)
-            READ(iounit) cloudsn(:,:,:,cm_index,:)
-            READ(iounit) cloudsnh(:,:,cm_index,:)
-            READ(iounit) rhon(:,:,:,cm_index,:)
-            READ(iounit) drhodzn(:,:,:,cm_index,:)
-            READ(iounit) tthn(:,:,:,cm_index,:)
-            READ(iounit) qvhn(:,:,:,cm_index,:)
-#endif
-
-            ncret = nf90_inq_varid(ncid, 'uun', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, uun(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'vvn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, vvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'wwn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, wwn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ttn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ttn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qvn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'pvn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, pvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'rhon', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, rhon(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'drhodzn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, drhodzn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tthn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tthn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qvhn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qvhn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'cloudsn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, cloudsn(0:nxmaxn-1,0:nymaxn-1,0:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'cloudsnh', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, cloudsnh(0:nxmaxn-1,0:nymaxn-1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
-            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
-
-
-
-
-            ! 2d nested fields
-
-
-#ifdef RAWBIN
-            READ(iounit) psn(:,:,:,cm_index,:)
-            READ(iounit) sdn(:,:,:,cm_index,:)
-            READ(iounit) msln(:,:,:,cm_index,:)
-            READ(iounit) tccn(:,:,:,cm_index,:)
-            READ(iounit) u10n(:,:,:,cm_index,:)
-            READ(iounit) v10n(:,:,:,cm_index,:)
-            READ(iounit) tt2n(:,:,:,cm_index,:)
-            READ(iounit) td2n(:,:,:,cm_index,:)
-            READ(iounit) lsprecn(:,:,:,cm_index,:)
-            READ(iounit) convprecn(:,:,:,cm_index,:)
-            READ(iounit) sshfn(:,:,:,cm_index,:)
-            READ(iounit) ssrn(:,:,:,cm_index,:)
-            READ(iounit) surfstrn(:,:,:,cm_index,:)
-            READ(iounit) ustarn(:,:,:,cm_index,:)
-            READ(iounit) wstarn(:,:,:,cm_index,:)
-            READ(iounit) hmixn(:,:,:,cm_index,:)
-            READ(iounit) tropopausen(:,:,:,cm_index,:)
-            READ(iounit) olin(:,:,:,cm_index,:)
-            READ(iounit) diffkn(:,:,:,cm_index,:)
-            READ(iounit) vdepn(:,:,:,cm_index,:)
-#endif
-
-
-            ncret = nf90_inq_varid(ncid, 'psn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, psn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'sdn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, sdn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'msln', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, msln(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tccn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tccn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'u10n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, u10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'v10n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, v10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tt2n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tt2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'td2n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, td2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'lsprecn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, lsprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'convprecn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, convprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'sshfn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, sshfn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ssrn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ssrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'surfstrn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, surfstrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ustarn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ustarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'wstarn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, wstarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'hmixn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, hmixn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tropopausen', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tropopausen(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'olin', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, olin(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'diffkn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, diffkn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'vdepn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, vdepn(0:nxmaxn-1,0:nymaxn-1,1:maxspec,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
-
-
-
-            ! Auxiliary variables for nests
-
-
-#ifdef RAWBIN
-            READ(iounit) xresoln(:)
-            READ(iounit) yresoln(:)
-            READ(iounit) xln(:)
-            READ(iounit) yln(:)
-            READ(iounit) xrn(:)
-            READ(iounit) yrn(:)
-#endif
-
-
-            ncret = nf90_inq_varid(ncid, 'xresoln', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xresoln(0:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'yresoln', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, yresoln(0:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xln', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xln(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'yln', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, yln(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xrn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xrn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'yrn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, yrn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
-            PRINT *, 'SUM(xrn): ', SUM(xrn)
-
-
-
-            ! Variables for polar stereographic projection
-
-
-#ifdef RAWBIN
-            READ(iounit) xglobal, sglobal, nglobal
-            READ(iounit) switchnorthg, switchsouthg
-            READ(iounit) southpolemap(:)
-            READ(iounit) northpolemap(:)
-#endif
-
-            ncret = nf90_inq_varid(ncid, 'southpolemap', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, southpolemap(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'northpolemap', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, northpolemap(:))
-            call handle_nf90_err(ncret)
-
-            ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
-            ! to INTEGER for NetCDF storage
-            ncret = nf90_inq_varid(ncid, 'xglobal', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
-            call handle_nf90_err(ncret)
-            xglobal = integer2logical(temp_integer)
-
-            ncret = nf90_inq_varid(ncid, 'sglobal', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
-            call handle_nf90_err(ncret)
-            sglobal = integer2logical(temp_integer)
-
-            ncret = nf90_inq_varid(ncid, 'nglobal', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
-            call handle_nf90_err(ncret)
-            nglobal = integer2logical(temp_integer)
-
-            ncret = nf90_inq_varid(ncid, 'switchnorthg', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, switchnorthg)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'switchsouthg', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, switchsouthg)
-            call handle_nf90_err(ncret)
-
-
-            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
-            PRINT *, 'xglobal: ', xglobal
-            PRINT *, 'sglobal: ', sglobal
-            PRINT *, 'nglobal: ', nglobal
-            PRINT *, 'switchsouthg: ', switchsouthg
-
-
-
-
-            ! Variables declared in conv_mod (convection)
-
-
-#ifdef RAWBIN
-            READ(iounit) pconv(:)
-            READ(iounit) phconv(:)
-            READ(iounit) dpr(:)
-            READ(iounit) pconv_hpa(:)
-            READ(iounit) phconv_hpa(:)
-            READ(iounit) ft(:)
-            READ(iounit) fq(:)
-            READ(iounit) fmass(:,:)
-            READ(iounit) sub(:)
-            READ(iounit) fmassfrac(:,:)
-            READ(iounit) cbaseflux(:,:)
-            READ(iounit) cbasefluxn(:,:,:)
-            READ(iounit) tconv(:)
-            READ(iounit) qconv(:)
-            READ(iounit) qsconv(:)
-            READ(iounit) psconv, tt2conv, td2conv
-            READ(iounit) nconvlev, nconvtop
-#endif
-
-
-
-            ncret = nf90_inq_varid(ncid, 'pconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, pconv(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dpr', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dpr(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'pconv_hpa', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, pconv_hpa(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ft', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ft(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'fq', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, fq(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'sub', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, sub(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'phconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, phconv(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'phconv_hpa', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, phconv_hpa(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tconv(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qconv(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qsconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qsconv(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'fmass', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, fmass(:,:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'fmassfrac', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, fmassfrac(:,:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'cbaseflux', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, cbaseflux(0:nxmax-1,0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'cbasefluxn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, cbasefluxn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'psconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, psconv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tt2conv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tt2conv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'td2conv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, td2conv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nconvlev', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nconvlev)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nconvtop', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nconvtop)
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(pconv): ', SUM(pconv)
-            PRINT *, 'SUM(qconv): ', SUM(qconv)
-            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
-            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
-            PRINT *, 'tt2conv: ', tt2conv
-            PRINT *, 'nconvlev: ', nconvlev
-
-
-
-        ELSE
-            STOP 'fpio(): Illegal operation' 
-            
-        ENDIF
-    END SUBROUTINE fpio
-
-    SUBROUTINE fpmetbinary_filetext(filename, cm_index)
-
-        ! This is a utility subroutine meant to be used for testing purposes.
-        ! It facilitates the text output of variables read in from the 
-        ! specified .fp file.  This routine will easily cause the program
-        ! to crash due memory allocation issues, particularly when you are
-        ! trying to text print 3d arrays in a single formatted statetment.
-        
-        CHARACTER(LEN=*), INTENT(IN) :: filename
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-        !OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', status='REPLACE', &
-        !    form="formatted", access="stream")
-        OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', &
-             form="formatted", access="APPEND")
-
-        WRITE(IOUNIT_TEXTOUT, *) 'oro: ', oro
-        WRITE(IOUNIT_TEXTOUT, *) 'excessoro: ', excessoro
-        WRITE(IOUNIT_TEXTOUT, *) 'lsm: ', lsm
-        WRITE(IOUNIT_TEXTOUT, *) 'xlanduse: ', xlanduse
-        WRITE(IOUNIT_TEXTOUT, *) 'height: ', height
-
-        WRITE(IOUNIT_TEXTOUT, *) 'uu: ', uu(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'vv: ', vv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'uupol: ', uupol(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'vvpol: ', vvpol(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'ww: ', ww(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'tt: ', tt(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'qv: ', qv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'pv: ', pv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'rho: ', rho(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'drhodz: ', drhodz(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'tth: ', tth(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'qvh: ', qvh(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'pplev: ', pplev(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'clouds: ', clouds(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'cloudsh: ', cloudsh(:,:,cm_index)
-
-
-
-
-        CLOSE(IOUNIT_TEXTOUT)
-    END SUBROUTINE fpmetbinary_filetext
-
-    subroutine handle_nf90_err(status)
-
-        ! Custom routine for checking NF90 error status
-        ! and aborting if necessary
-        use netcdf
-        implicit none
-        integer, intent (in) :: status
-
-        if (status /= nf90_noerr) then
-            print *, trim(nf90_strerror(status))
-            stop "Stopped..."
-        endif
-    end subroutine handle_nf90_err
-
-
-    INTEGER FUNCTION logical2integer(logical_value)
-        IMPLICIT NONE
-
-        ! Auxiliary function to convert logical values to
-        ! integers.  THIS DOES NO TYPE CHECKING!!!
-
-
-        LOGICAL, INTENT(IN) :: logical_value
-
-        IF (logical_value .EQV. .TRUE.) THEN
-            logical2integer = 1
-        ELSE
-            logical2integer = 0
-        ENDIF
-
-        RETURN
-
-    END FUNCTION logical2integer
-
-
-    LOGICAL FUNCTION integer2logical(integer_value)
-        IMPLICIT NONE
-
-        ! Auxiliary function to convert integer values to
-        ! logical.  THIS DOES NO TYPE CHECKING!!!
-
-
-        INTEGER, INTENT(IN) :: integer_value
-
-        IF (integer_value .EQ. 0) THEN
-            integer2logical = .FALSE.
-        ELSE
-            integer2logical = .TRUE.
-        ENDIF
-
-        RETURN
-
-    END FUNCTION integer2logical
-
-
-END MODULE fpmetbinary_mod
diff --git a/flexpart_code/fpmetbinary_mod.F90.SAVE b/flexpart_code/fpmetbinary_mod.F90.SAVE
deleted file mode 100644
index ce08967d455f3f76be24ee0f5e8acdd015781325..0000000000000000000000000000000000000000
--- a/flexpart_code/fpmetbinary_mod.F90.SAVE
+++ /dev/null
@@ -1,666 +0,0 @@
-MODULE fpmetbinary_mod
-
-  !*****************************************************************************
-  !                                                                            *
-  !     Contains data and routines for dumping and loading processed met       *
-  !     fields.                                                                *
-  !     Authors Don Morton (Don.Morton@borealscicomp.com)                      *
-  !             Delia Arnold (deliona.arnold@gmail.com)                        *
-  !                                                                            *
-  !     07 Oct 2016                                                            *
-  !                                                                            *
-  !     Most of the data structures from com_mod.f90 that are dumped and       *
-  !     loaded have a final dimension of size two, so that they may hold data  *
-  !     from two met files.  When we dump the contents into a .fp file, we     *
-  !     need to specify which of the two to dump.  Likewise, when we load      *
-  !     from a .fp file, we need to specify which of the two possible indices  *
-  !     to load into.                                                          *
-  !                                                                            *
-  !     Note that these routines need more robustness.  For example, what      *
-  !     what happens if the filename can't be read or written.  Or, what       *
-  !     happens if a read or write fails in any way.  Right now, it's crash    *
-  !     city.                                                                  *
-  !                                                                            *
-  !     Recent enhancements (07 Oct 2016) DJM:                                 *
-  !                                                                            *
-  !     - file format changed so that compiled dimensions are output, and      *
-  !       during input these same dimensions are compared with the dimensions  *
-  !       compiled into the flexpart that is reading it.  A discrepancy        *
-  !       causes abort, so that time isn't wasted reading an incompatible      *
-  !       file.                                                                *
-  !                                                                            *
-  !     - file format changed so that first item is an 8-character string      *
-  !       depicting the version of the preprocessed file format.               *
-  !       An inconsistency between a detected and expected string results      *
-  !       in program abort.                                                    *
-  !                                                                            *
-  !       *** IMPORTANT *** - when the format of the preprocessed output is    *
-  !       modified in any way, be sure to change the version string below,     *
-  !       PREPROC_FORMAT_VERSION_STR, so that attempts to read the output      *
-  !       with a different format version will cause an abort.                 *
-  !                                                                            *
-  !*****************************************************************************
-
-    USE com_mod
-    USE conv_mod
-    USE par_mod, ONLY : nxmax, nymax, nzmax, nuvzmax, nwzmax
-
-    IMPLICIT NONE
-
-    ! Users may want to change these IO Unit values if they conflict with other parts
-    ! of code
-    INTEGER, PARAMETER :: IOUNIT_DUMP = 33, IOUNIT_LOAD = 34, &
-                          IOUNIT_TEXTOUT = 35
-
-    ! When a change is made to the format of the preprocessed file, such that
-    ! this routine will not be able to read a previous version, this version
-    ! string should be modified
-    CHARACTER(LEN=12), PARAMETER :: PREPROC_FORMAT_VERSION_STR = 'FP_p-9.3.1'//char(0)
-
-    PRIVATE IOUNIT_DUMP, IOUNIT_LOAD, IOUNIT_TEXTOUT, fpio,    &
-&           PREPROC_FORMAT_VERSION_STR
-
-
-CONTAINS
-
-  !*****************************************************************************
-  !                                                                            *
-  !    Subroutines fpmetbinary_dump() and fpmetbinary_load() provide the       *
-  !    public interface to                                                     *
-  !    this module functionality.  I created the PRIVATE fpio() because I      *
-  !    wanted all interactions with variables to be in one place.  The read    *
-  !    and write operations need to be done in exactly the same sequence, so   *
-  !    I felt like keeping them in the same routine would at least allow for   *
-  !    coders to more easily compare the two sequences than if they were       *
-  !    separate.                                                               *
-  !                                                                            *
-  !    As mentioned above, the dumps and loads will, for most variables,       *
-  !    need to refer to one of two index values for the last dimension of      *
-  !    the array.                                                              *
-  !                                                                            *
-  !*****************************************************************************
-
-
-    SUBROUTINE fpmetbinary_dump(filename, cm_index)
-        CHARACTER(LEN=*), INTENT(IN) :: filename  ! Full path for file
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
-
-        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
-        OPEN(IOUNIT_DUMP, file=filename, action='WRITE', status='REPLACE', form="unformatted", access="stream")
-        CALL fpio(IOUNIT_DUMP, 'DUMP', cm_index)
-        CLOSE(IOUNIT_DUMP)
-        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
-
-        !PRINT *, 'Dump walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
-    END SUBROUTINE fpmetbinary_dump
-
-    SUBROUTINE fpmetbinary_load(filename, cm_index)
-        CHARACTER(LEN=*), INTENT(IN) :: filename  ! Full path for file
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
-
-        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
-        OPEN(IOUNIT_LOAD, file=filename, action='READ', status='OLD', form="unformatted", access="stream")
-        CALL fpio(IOUNIT_LOAD, 'LOAD', cm_index)
-        CLOSE(IOUNIT_LOAD)
-        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
-        !PRINT *, 'Load walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
-    END SUBROUTINE fpmetbinary_load
-
-    SUBROUTINE fpmetbinary_zero(cm_index)
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-
-        ! Zeroes out, in local datastructures, the values dumped/loaded
-        ! This was written primarily as a testing mechanism.
-        ! The lines here correspond to READ and WRITE in the dump/load routines
-
-        ! Scalar values
-        nx=0.0; ny=0.0; nxmin1=0.0; nymin1=0.0; nxfield=0.0
-        nuvz=0.0; nwz=0.0; nz=0.0; nmixz=0.0; nlev_ec=0.0
-        dx=0.0; dy=0.0; xlon0=0.0; ylat0=0.0; dxconst=0.0; dyconst=0.0
-
-        ! Fixed fields, static in time
-        oro=0.0; excessoro=0.0; lsm=0.0; xlanduse=0.0; height=0.0
-
-        ! 3d fields
-        uu(:,:,:,cm_index) = 0.0
-        vv(:,:,:,cm_index) = 0.0
-        uupol(:,:,:,cm_index) = 0.0
-        vvpol(:,:,:,cm_index) = 0.0
-        ww(:,:,:,cm_index) = 0.0
-        tt(:,:,:,cm_index) = 0.0
-        qv(:,:,:,cm_index) = 0.0
-        pv(:,:,:,cm_index) = 0.0
-        rho(:,:,:,cm_index) = 0.0
-        drhodz(:,:,:,cm_index) = 0.0
-        tth(:,:,:,cm_index) = 0.0
-        qvh(:,:,:,cm_index) = 0.0
-        pplev(:,:,:,cm_index) = 0.0
-        clouds(:,:,:,cm_index) = 0.0
-        cloudsh(:,:,cm_index) = 0.0
-
-        ! 2d fields
-        ps(:,:,:,cm_index) = 0.0
-        sd(:,:,:,cm_index) = 0.0
-        msl(:,:,:,cm_index) = 0.0
-        tcc(:,:,:,cm_index) = 0.0
-        u10(:,:,:,cm_index) = 0.0
-        v10(:,:,:,cm_index) = 0.0
-        tt2(:,:,:,cm_index) = 0.0
-        td2(:,:,:,cm_index) = 0.0
-        lsprec(:,:,:,cm_index) = 0.0
-        convprec(:,:,:,cm_index) = 0.0
-        sshf(:,:,:,cm_index) = 0.0
-        ssr(:,:,:,cm_index) = 0.0
-        surfstr(:,:,:,cm_index) = 0.0
-        ustar(:,:,:,cm_index) = 0.0
-        wstar(:,:,:,cm_index) = 0.0
-        hmix(:,:,:,cm_index) = 0.0
-        tropopause(:,:,:,cm_index) = 0.0
-        oli(:,:,:,cm_index) = 0.0
-        diffk(:,:,:,cm_index) = 0.0
-        vdep(:,:,:,cm_index) = 0.0
-
-        ! 1d fields
-        z0(:) = 0.0
-        akm(:) = 0.0
-        bkm(:) = 0.0
-        akz(:) = 0.0
-        bkz(:) = 0.0
-        aknew(:) = 0.0
-        bknew(:) = 0.0
-
-        ! Nested, scalar values (for each nest)
-        nxn(:) = 0.0
-        nyn(:) = 0.0
-        dxn(:) = 0.0
-        dyn(:) = 0.0
-        xlon0n(:) = 0.0
-        ylat0n(:) = 0.0
-
-        ! Nested fields, static in time
-        oron=0.0; excessoron=0.0; lsmn=0.0; xlandusen=0.0
-
-        ! 3d nested fields
-        uun(:,:,:,cm_index,:) = 0.0
-        wwn(:,:,:,cm_index,:) = 0.0
-        ttn(:,:,:,cm_index,:) = 0.0
-        qvn(:,:,:,cm_index,:) = 0.0
-        pvn(:,:,:,cm_index,:) = 0.0
-        cloudsn(:,:,:,cm_index,:) = 0.0
-        cloudsnh(:,:,cm_index,:) = 0.0
-        rhon(:,:,:,cm_index,:) = 0.0
-        drhodzn(:,:,:,cm_index,:) = 0.0
-        tthn(:,:,:,cm_index,:) = 0.0
-        qvhn(:,:,:,cm_index,:) = 0.0
-
-        ! 2d nested fields
-        psn(:,:,:,cm_index,:) = 0.0
-        sdn(:,:,:,cm_index,:) = 0.0
-        msln(:,:,:,cm_index,:) = 0.0
-        tccn(:,:,:,cm_index,:) = 0.0
-        u10n(:,:,:,cm_index,:) = 0.0
-        v10n(:,:,:,cm_index,:) = 0.0
-        tt2n(:,:,:,cm_index,:) = 0.0
-        td2n(:,:,:,cm_index,:) = 0.0
-        lsprecn(:,:,:,cm_index,:) = 0.0
-        convprecn(:,:,:,cm_index,:) = 0.0
-        sshfn(:,:,:,cm_index,:) = 0.0
-        ssrn(:,:,:,cm_index,:) = 0.0
-        surfstrn(:,:,:,cm_index,:) = 0.0
-        ustarn(:,:,:,cm_index,:) = 0.0
-        wstarn(:,:,:,cm_index,:) = 0.0
-        hmixn(:,:,:,cm_index,:) = 0.0
-        tropopausen(:,:,:,cm_index,:) = 0.0
-        olin(:,:,:,cm_index,:) = 0.0
-        diffkn(:,:,:,cm_index,:) = 0.0
-        vdepn(:,:,:,cm_index,:) = 0.0
-
-        ! Auxiliary variables for nests
-        xresoln(:) = 0.0
-        yresoln(:) = 0.0
-        xln(:) = 0.0
-        yln(:) = 0.0
-        xrn(:) = 0.0
-        yrn(:) = 0.0
-
-        ! Variables for polar stereographic projection
-        xglobal=.FALSE.; sglobal=.FALSE.; nglobal=.FALSE.
-        switchnorthg=0.0; switchsouthg=0.0
-        southpolemap(:) = 0.0
-        northpolemap(:) = 0.0
-
-        ! Variables declared in conv_mod (convection)
-        pconv(:) = 0.0
-        phconv(:) = 0.0
-        dpr(:) = 0.0
-        pconv_hpa(:) = 0.0
-        phconv_hpa(:) = 0.0
-        ft(:) = 0.0
-        fq(:) = 0.0
-        fmass(:,:) = 0.0
-        sub(:) = 0.0
-        fmassfrac(:,:) = 0.0
-        cbaseflux(:,:) = 0.0
-        cbasefluxn(:,:,:) = 0.0
-        tconv(:) = 0.0
-        qconv(:) = 0.0
-        qsconv(:) = 0.0
-        psconv=0.0; tt2conv=0.0; td2conv=0.0
-        nconvlev=0.0; nconvtop=0.0
-
-    END SUBROUTINE fpmetbinary_zero
-
-    SUBROUTINE fpio(iounit, op, cm_index)
-        IMPLICIT NONE
-        INTEGER, INTENT(IN) :: iounit
-        CHARACTER(LEN=4), INTENT(IN) :: op        ! Operation - DUMP or LOAD
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-        ! These are temporary variables, used in the LOAD option, for 
-        ! comparing against the current values in FLEXPART of nxmax, nymax, ...
-        INTEGER :: temp_nxmax, temp_nymax, temp_nzmax, &
-&                  temp_nuvzmax, temp_nwzmax
-
-        CHARACTER(LEN=12) :: temp_preproc_format_version_str
-
-        CHARACTER(LEN=128) :: errmesg
-
-        if (op == 'DUMP') THEN
-
-
-            ! Write the preprocessing format version string
-            WRITE (iounit) PREPROC_FORMAT_VERSION_STR
-
-            ! Write the compiled max dimensions from par_mod - these are
-            ! not meant to be reassigned during a LOAD, but used as "header"
-            ! information to provide the structure of arrays
-            WRITE (iounit) nxmax, nymax, nzmax, nuvzmax, nwzmax
-
-            ! Scalar values
-            WRITE(iounit) nx, ny, nxmin1, nymin1, nxfield
-            WRITE(iounit) nuvz, nwz, nz, nmixz, nlev_ec
-            WRITE(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
-
-            ! Fixed fields, static in time
-            WRITE(iounit) oro, excessoro, lsm, xlanduse, height
-
-            ! 3d fields
-            WRITE(iounit) uu(:,:,:,cm_index)
-            WRITE(iounit) vv(:,:,:,cm_index)
-            WRITE(iounit) uupol(:,:,:,cm_index)
-            WRITE(iounit) vvpol(:,:,:,cm_index)
-            WRITE(iounit) ww(:,:,:,cm_index)
-            WRITE(iounit) tt(:,:,:,cm_index)
-            WRITE(iounit) qv(:,:,:,cm_index)
-            WRITE(iounit) pv(:,:,:,cm_index)
-            WRITE(iounit) rho(:,:,:,cm_index)
-            WRITE(iounit) drhodz(:,:,:,cm_index)
-            WRITE(iounit) tth(:,:,:,cm_index)
-            WRITE(iounit) qvh(:,:,:,cm_index)
-            WRITE(iounit) pplev(:,:,:,cm_index)
-            WRITE(iounit) clouds(:,:,:,cm_index)
-            WRITE(iounit) cloudsh(:,:,cm_index)
-
-            ! 2d fields
-            WRITE(iounit) ps(:,:,:,cm_index)
-            WRITE(iounit) sd(:,:,:,cm_index)
-            WRITE(iounit) msl(:,:,:,cm_index)
-            WRITE(iounit) tcc(:,:,:,cm_index)
-            WRITE(iounit) u10(:,:,:,cm_index)
-            WRITE(iounit) v10(:,:,:,cm_index)
-            WRITE(iounit) tt2(:,:,:,cm_index)
-            WRITE(iounit) td2(:,:,:,cm_index)
-            WRITE(iounit) lsprec(:,:,:,cm_index)
-            WRITE(iounit) convprec(:,:,:,cm_index)
-            WRITE(iounit) sshf(:,:,:,cm_index)
-            WRITE(iounit) ssr(:,:,:,cm_index)
-            WRITE(iounit) surfstr(:,:,:,cm_index)
-            WRITE(iounit) ustar(:,:,:,cm_index)
-            WRITE(iounit) wstar(:,:,:,cm_index)
-            WRITE(iounit) hmix(:,:,:,cm_index)
-            WRITE(iounit) tropopause(:,:,:,cm_index)
-            WRITE(iounit) oli(:,:,:,cm_index)
-            WRITE(iounit) diffk(:,:,:,cm_index)
-            WRITE(iounit) vdep(:,:,:,cm_index)
-
-            ! 1d fields
-            WRITE(iounit) z0(:)
-            WRITE(iounit) akm(:)
-            WRITE(iounit) bkm(:)
-            WRITE(iounit) akz(:)
-            WRITE(iounit) bkz(:)
-            WRITE(iounit) aknew(:)
-            WRITE(iounit) bknew(:)
-
-            ! Nested, scalar values (for each nest)
-            WRITE(iounit) nxn(:)
-            WRITE(iounit) nyn(:)
-            WRITE(iounit) dxn(:)
-            WRITE(iounit) dyn(:)
-            WRITE(iounit) xlon0n(:)
-            WRITE(iounit) ylat0n(:)
-
-            ! Nested fields, static over time
-            WRITE(iounit) oron, excessoron, lsmn, xlandusen 
-
-            ! 3d nested fields
-            WRITE(iounit) uun(:,:,:,cm_index,:)
-            WRITE(iounit) vvn(:,:,:,cm_index,:)
-            WRITE(iounit) wwn(:,:,:,cm_index,:)
-            WRITE(iounit) ttn(:,:,:,cm_index,:)
-            WRITE(iounit) qvn(:,:,:,cm_index,:)
-            WRITE(iounit) pvn(:,:,:,cm_index,:)
-            WRITE(iounit) cloudsn(:,:,:,cm_index,:)
-            WRITE(iounit) cloudsnh(:,:,cm_index,:)
-            WRITE(iounit) rhon(:,:,:,cm_index,:)
-            WRITE(iounit) drhodzn(:,:,:,cm_index,:)
-            WRITE(iounit) tthn(:,:,:,cm_index,:)
-            WRITE(iounit) qvhn(:,:,:,cm_index,:)
-
-            ! 2d nested fields
-            WRITE(iounit) psn(:,:,:,cm_index,:)
-            WRITE(iounit) sdn(:,:,:,cm_index,:)
-            WRITE(iounit) msln(:,:,:,cm_index,:)
-            WRITE(iounit) tccn(:,:,:,cm_index,:)
-            WRITE(iounit) u10n(:,:,:,cm_index,:)
-            WRITE(iounit) v10n(:,:,:,cm_index,:)
-            WRITE(iounit) tt2n(:,:,:,cm_index,:)
-            WRITE(iounit) td2n(:,:,:,cm_index,:)
-            WRITE(iounit) lsprecn(:,:,:,cm_index,:)
-            WRITE(iounit) convprecn(:,:,:,cm_index,:)
-            WRITE(iounit) sshfn(:,:,:,cm_index,:)
-            WRITE(iounit) ssrn(:,:,:,cm_index,:)
-            WRITE(iounit) surfstrn(:,:,:,cm_index,:)
-            WRITE(iounit) ustarn(:,:,:,cm_index,:)
-            WRITE(iounit) wstarn(:,:,:,cm_index,:)
-            WRITE(iounit) hmixn(:,:,:,cm_index,:)
-            WRITE(iounit) tropopausen(:,:,:,cm_index,:)
-            WRITE(iounit) olin(:,:,:,cm_index,:)
-            WRITE(iounit) diffkn(:,:,:,cm_index,:)
-            WRITE(iounit) vdepn(:,:,:,cm_index,:)
-
-            ! Auxiliary variables for nests
-            WRITE(iounit) xresoln(:)
-            WRITE(iounit) yresoln(:)
-            WRITE(iounit) xln(:)
-            WRITE(iounit) yln(:)
-            WRITE(iounit) xrn(:)
-            WRITE(iounit) yrn(:)
-
-            ! Variables for polar stereographic projection
-            WRITE(iounit) xglobal, sglobal, nglobal
-            WRITE(iounit) switchnorthg, switchsouthg
-            WRITE(iounit) southpolemap(:)
-            WRITE(iounit) northpolemap(:)
-
-            ! Variables declared in conv_mod (convection)
-            WRITE(iounit) pconv(:)
-            WRITE(iounit) phconv(:)
-            WRITE(iounit) dpr(:)
-            WRITE(iounit) pconv_hpa(:)
-            WRITE(iounit) phconv_hpa(:)
-            WRITE(iounit) ft(:)
-            WRITE(iounit) fq(:)
-            WRITE(iounit) fmass(:,:)
-            WRITE(iounit) sub(:)
-            WRITE(iounit) fmassfrac(:,:)
-            WRITE(iounit) cbaseflux(:,:)
-            WRITE(iounit) cbasefluxn(:,:,:)
-            WRITE(iounit) tconv(:)
-            WRITE(iounit) qconv(:)
-            WRITE(iounit) qsconv(:)
-            WRITE(iounit) psconv, tt2conv, td2conv
-            WRITE(iounit) nconvlev, nconvtop
-
-        ELSE IF (op == 'LOAD') THEN 
-
-            ! Read the preprocessed format version string and insure it
-            ! matches this version
-            READ (iounit) temp_preproc_format_version_str
-            PRINT *, 'Reading preprocessed file format version: ', &
-&                    temp_preproc_format_version_str
-
-            IF (TRIM(temp_preproc_format_version_str) == &
-&                                        TRIM(PREPROC_FORMAT_VERSION_STR)) THEN
-                CONTINUE
-            ELSE
-                ! PRINT *, ''  GK: causes relocation truncated to fit: R_X86_64_32
-                PRINT *, 'Inconsistent preprocessing format version'
-                PRINT *, 'Expected Version: ', PREPROC_FORMAT_VERSION_STR
-                PRINT *, 'Detected Version: ', temp_preproc_format_version_str
-                ! PRINT *, ''
-                STOP
-            END IF
-
-            ! Read the compiled max dimensions that were dumped from par_mod 
-            ! when creating the fp file, so that we can compare against
-            ! current FLEXPART dimensions - they need to be the same, or else
-            ! we abort.
-            READ (iounit) temp_nxmax, temp_nymax, temp_nzmax, &
-&                         temp_nuvzmax, temp_nwzmax
-
-
-            IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. &
-&                   (temp_nzmax == nzmax) .AND. &
-&                   (temp_nuvzmax == nuvzmax) .AND. &
-&                   (temp_nwzmax == nwzmax) ) THEN
-                CONTINUE
-            ELSE
-                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
-                ! PRINT *, ''
-                PRINT *, '                  FP file     Compiled FP'
-                PRINT *, 'nxmax:     ', temp_nxmax, '    ', nxmax 
-                PRINT *, 'nymax:     ', temp_nymax, '    ', nymax 
-                PRINT *, 'nzmax:     ', temp_nzmax, '    ', nzmax 
-                PRINT *, 'nuvzmax:     ', temp_nuvzmax, '    ', nuvzmax 
-                PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax 
-                ! PRINT *, ''
-                STOP
-            END IF
-
-
-            ! Scalar values
-            READ(iounit) nx, ny, nxmin1, nymin1, nxfield
-            READ(iounit) nuvz, nwz, nz, nmixz, nlev_ec
-            READ(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
-
-            ! Fixed fields, static in time
-            READ(iounit) oro, excessoro, lsm, xlanduse, height
-
-            ! 3d fields
-            READ(iounit) uu(:,:,:,cm_index)
-            READ(iounit) vv(:,:,:,cm_index)
-            READ(iounit) uupol(:,:,:,cm_index)
-            READ(iounit) vvpol(:,:,:,cm_index)
-            READ(iounit) ww(:,:,:,cm_index)
-            READ(iounit) tt(:,:,:,cm_index)
-            READ(iounit) qv(:,:,:,cm_index)
-            READ(iounit) pv(:,:,:,cm_index)
-            READ(iounit) rho(:,:,:,cm_index)
-            READ(iounit) drhodz(:,:,:,cm_index)
-            READ(iounit) tth(:,:,:,cm_index)
-            READ(iounit) qvh(:,:,:,cm_index)
-            READ(iounit) pplev(:,:,:,cm_index)
-            READ(iounit) clouds(:,:,:,cm_index)
-            READ(iounit) cloudsh(:,:,cm_index)
-
-            ! 2d fields
-            READ(iounit) ps(:,:,:,cm_index)
-            READ(iounit) sd(:,:,:,cm_index)
-            READ(iounit) msl(:,:,:,cm_index)
-            READ(iounit) tcc(:,:,:,cm_index)
-            READ(iounit) u10(:,:,:,cm_index)
-            READ(iounit) v10(:,:,:,cm_index)
-            READ(iounit) tt2(:,:,:,cm_index)
-            READ(iounit) td2(:,:,:,cm_index)
-            READ(iounit) lsprec(:,:,:,cm_index)
-            READ(iounit) convprec(:,:,:,cm_index)
-            READ(iounit) sshf(:,:,:,cm_index)
-            READ(iounit) ssr(:,:,:,cm_index)
-            READ(iounit) surfstr(:,:,:,cm_index)
-            READ(iounit) ustar(:,:,:,cm_index)
-            READ(iounit) wstar(:,:,:,cm_index)
-            READ(iounit) hmix(:,:,:,cm_index)
-            READ(iounit) tropopause(:,:,:,cm_index)
-            READ(iounit) oli(:,:,:,cm_index)
-            READ(iounit) diffk(:,:,:,cm_index)
-            READ(iounit) vdep(:,:,:,cm_index)
-
-            ! 1d fields
-            READ(iounit) z0(:)
-            READ(iounit) akm(:)
-            READ(iounit) bkm(:)
-            READ(iounit) akz(:)
-            READ(iounit) bkz(:)
-            READ(iounit) aknew(:)
-            READ(iounit) bknew(:)
-
-
-            ! Nested, scalar values (for each nest)
-            READ(iounit) nxn(:)
-            READ(iounit) nyn(:)
-            READ(iounit) dxn(:)
-            READ(iounit) dyn(:)
-            READ(iounit) xlon0n(:)
-            READ(iounit) ylat0n(:)
-
-
-            ! Nested fields, static over time
-            READ(iounit) oron, excessoron, lsmn, xlandusen 
-
-            ! 3d nested fields
-            READ(iounit) uun(:,:,:,cm_index,:)
-            READ(iounit) vvn(:,:,:,cm_index,:)
-            READ(iounit) wwn(:,:,:,cm_index,:)
-            READ(iounit) ttn(:,:,:,cm_index,:)
-            READ(iounit) qvn(:,:,:,cm_index,:)
-            READ(iounit) pvn(:,:,:,cm_index,:)
-            READ(iounit) cloudsn(:,:,:,cm_index,:)
-            READ(iounit) cloudsnh(:,:,cm_index,:)
-            READ(iounit) rhon(:,:,:,cm_index,:)
-            READ(iounit) drhodzn(:,:,:,cm_index,:)
-            READ(iounit) tthn(:,:,:,cm_index,:)
-            READ(iounit) qvhn(:,:,:,cm_index,:)
-
-            ! 2d nested fields
-            READ(iounit) psn(:,:,:,cm_index,:)
-            READ(iounit) sdn(:,:,:,cm_index,:)
-            READ(iounit) msln(:,:,:,cm_index,:)
-            READ(iounit) tccn(:,:,:,cm_index,:)
-            READ(iounit) u10n(:,:,:,cm_index,:)
-            READ(iounit) v10n(:,:,:,cm_index,:)
-            READ(iounit) tt2n(:,:,:,cm_index,:)
-            READ(iounit) td2n(:,:,:,cm_index,:)
-            READ(iounit) lsprecn(:,:,:,cm_index,:)
-            READ(iounit) convprecn(:,:,:,cm_index,:)
-            READ(iounit) sshfn(:,:,:,cm_index,:)
-            READ(iounit) ssrn(:,:,:,cm_index,:)
-            READ(iounit) surfstrn(:,:,:,cm_index,:)
-            READ(iounit) ustarn(:,:,:,cm_index,:)
-            READ(iounit) wstarn(:,:,:,cm_index,:)
-            READ(iounit) hmixn(:,:,:,cm_index,:)
-            READ(iounit) tropopausen(:,:,:,cm_index,:)
-            READ(iounit) olin(:,:,:,cm_index,:)
-            READ(iounit) diffkn(:,:,:,cm_index,:)
-            READ(iounit) vdepn(:,:,:,cm_index,:)
-
-            ! Auxiliary variables for nests
-            READ(iounit) xresoln(:)
-            READ(iounit) yresoln(:)
-            READ(iounit) xln(:)
-            READ(iounit) yln(:)
-            READ(iounit) xrn(:)
-            READ(iounit) yrn(:)
-
-            ! Variables for polar stereographic projection
-            READ(iounit) xglobal, sglobal, nglobal
-            READ(iounit) switchnorthg, switchsouthg
-            READ(iounit) southpolemap(:)
-            READ(iounit) northpolemap(:)
-
-            ! Variables declared in conv_mod (convection)
-            READ(iounit) pconv(:)
-            READ(iounit) phconv(:)
-            READ(iounit) dpr(:)
-            READ(iounit) pconv_hpa(:)
-            READ(iounit) phconv_hpa(:)
-            READ(iounit) ft(:)
-            READ(iounit) fq(:)
-            READ(iounit) fmass(:,:)
-            READ(iounit) sub(:)
-            READ(iounit) fmassfrac(:,:)
-            READ(iounit) cbaseflux(:,:)
-            READ(iounit) cbasefluxn(:,:,:)
-            READ(iounit) tconv(:)
-            READ(iounit) qconv(:)
-            READ(iounit) qsconv(:)
-            READ(iounit) psconv, tt2conv, td2conv
-            READ(iounit) nconvlev, nconvtop
-
-        ELSE
-            STOP 'fpio(): Illegal operation' 
-            
-        ENDIF
-    END SUBROUTINE fpio
-
-    SUBROUTINE fpmetbinary_filetext(filename, cm_index)
-
-        ! This is a utility subroutine meant to be used for testing purposes.
-        ! It facilitates the text output of variables read in from the 
-        ! specified .fp file.  This routine will easily cause the program
-        ! to crash due memory allocation issues, particularly when you are
-        ! trying to text print 3d arrays in a single formatted statetment.
-        
-        CHARACTER(LEN=*), INTENT(IN) :: filename
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-        !OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', status='REPLACE', &
-        !    form="formatted", access="stream")
-        OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', &
-             form="formatted", access="APPEND")
-
-        WRITE(IOUNIT_TEXTOUT, *) 'oro: ', oro
-        WRITE(IOUNIT_TEXTOUT, *) 'excessoro: ', excessoro
-        WRITE(IOUNIT_TEXTOUT, *) 'lsm: ', lsm
-        WRITE(IOUNIT_TEXTOUT, *) 'xlanduse: ', xlanduse
-        WRITE(IOUNIT_TEXTOUT, *) 'height: ', height
-
-        WRITE(IOUNIT_TEXTOUT, *) 'uu: ', uu(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'vv: ', vv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'uupol: ', uupol(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'vvpol: ', vvpol(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'ww: ', ww(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'tt: ', tt(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'qv: ', qv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'pv: ', pv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'rho: ', rho(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'drhodz: ', drhodz(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'tth: ', tth(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'qvh: ', qvh(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'pplev: ', pplev(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'clouds: ', clouds(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'cloudsh: ', cloudsh(:,:,cm_index)
-
-
-
-
-        CLOSE(IOUNIT_TEXTOUT)
-    END SUBROUTINE fpmetbinary_filetext
-
-
-END MODULE fpmetbinary_mod
diff --git a/flexpart_code/fpmetbinary_mod.F90.save.20170415 b/flexpart_code/fpmetbinary_mod.F90.save.20170415
deleted file mode 100644
index 876fcdf9c06a4a0e59fd47b724f1eec6fc9360a2..0000000000000000000000000000000000000000
--- a/flexpart_code/fpmetbinary_mod.F90.save.20170415
+++ /dev/null
@@ -1,3328 +0,0 @@
-MODULE fpmetbinary_mod
-
-  !*****************************************************************************
-  !                                                                            *
-  !     Contains data and routines for dumping and loading processed met       *
-  !     fields.                                                                *
-  !     Authors Don Morton (Don.Morton@borealscicomp.com)                      *
-  !             Delia Arnold (deliona.arnold@gmail.com)                        *
-  !                                                                            *
-  !     07 Oct 2016                                                            *
-  !                                                                            *
-  !     Most of the data structures from com_mod.f90 that are dumped and       *
-  !     loaded have a final dimension of size two, so that they may hold data  *
-  !     from two met files.  When we dump the contents into a .fp file, we     *
-  !     need to specify which of the two to dump.  Likewise, when we load      *
-  !     from a .fp file, we need to specify which of the two possible indices  *
-  !     to load into.                                                          *
-  !                                                                            *
-  !     Note that these routines need more robustness.  For example, what      *
-  !     what happens if the filename can't be read or written.  Or, what       *
-  !     happens if a read or write fails in any way.  Right now, it's crash    *
-  !     city.                                                                  *
-  !                                                                            *
-  !     Recent enhancements (07 Oct 2016) DJM:                                 *
-  !                                                                            *
-  !     - file format changed so that compiled dimensions are output, and      *
-  !       during input these same dimensions are compared with the dimensions  *
-  !       compiled into the flexpart that is reading it.  A discrepancy        *
-  !       causes abort, so that time isn't wasted reading an incompatible      *
-  !       file.                                                                *
-  !                                                                            *
-  !     - file format changed so that first item is an 8-character string      *
-  !       depicting the version of the preprocessed file format.               *
-  !       An inconsistency between a detected and expected string results      *
-  !       in program abort.                                                    *
-  !                                                                            *
-  !       *** IMPORTANT *** - when the format of the preprocessed output is    *
-  !       modified in any way, be sure to change the version string below,     *
-  !       PREPROC_FORMAT_VERSION_STR, so that attempts to read the output      *
-  !       with a different format version will cause an abort.                 *
-  !                                                                            *
-  !*****************************************************************************
-
-    USE com_mod
-    USE conv_mod
-    USE par_mod, ONLY : nxmax, nymax, nzmax, nuvzmax, nwzmax, numclass, maxspec, &
-&                       maxnests, nxmaxn, nymaxn
-
-    USE netcdf
-
-    IMPLICIT NONE
-
-    ! Users may want to change these IO Unit values if they conflict with other parts
-    ! of code
-    INTEGER, PARAMETER :: IOUNIT_DUMP = 33, IOUNIT_LOAD = 34, &
-                          IOUNIT_TEXTOUT = 35
-
-    ! When a change is made to the format of the preprocessed file, such that
-    ! this routine will not be able to read a previous version, this version
-    ! string should be modified
-    CHARACTER(LEN=12), PARAMETER :: PREPROC_FORMAT_VERSION_STR = 'FP_p-9.3.1'//char(0)
-
-    PRIVATE IOUNIT_DUMP, IOUNIT_LOAD, IOUNIT_TEXTOUT, fpio,    &
-&           PREPROC_FORMAT_VERSION_STR
-
-
-CONTAINS
-
-  !*****************************************************************************
-  !                                                                            *
-  !    Subroutines fpmetbinary_dump() and fpmetbinary_load() provide the       *
-  !    public interface to                                                     *
-  !    this module functionality.  I created the PRIVATE fpio() because I      *
-  !    wanted all interactions with variables to be in one place.  The read    *
-  !    and write operations need to be done in exactly the same sequence, so   *
-  !    I felt like keeping them in the same routine would at least allow for   *
-  !    coders to more easily compare the two sequences than if they were       *
-  !    separate.                                                               *
-  !                                                                            *
-  !    As mentioned above, the dumps and loads will, for most variables,       *
-  !    need to refer to one of two index values for the last dimension of      *
-  !    the array.                                                              *
-  !                                                                            *
-  !*****************************************************************************
-
-
-    SUBROUTINE fpmetbinary_dump(filename, cm_index)
-        CHARACTER(LEN=*), INTENT(IN) :: filename  ! Full path for file
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
-
-        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
-
-        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
-
-        ! Create and open NC4 file for writing
-        PRINT *, 'Opening NC4 file...'
-        ncretval = nf90_create(filename // ".nc4", &
-&                              OR(NF90_CLOBBER, NF90_HDF5), &
-&                              ncid)
-
-        OPEN(IOUNIT_DUMP, file=filename, action='WRITE', status='REPLACE', form="unformatted", access="stream")
-
-
-
-
-
-
-        CALL fpio(IOUNIT_DUMP, ncid, 'DUMP', cm_index)
-        CLOSE(IOUNIT_DUMP)
-
-        PRINT *, 'Closing NC4 file...'
-        ncretval = nf90_close(ncid)
-
-        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
-
-        !PRINT *, 'Dump walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
-    END SUBROUTINE fpmetbinary_dump
-
-    SUBROUTINE fpmetbinary_load(filename, cm_index)
-        CHARACTER(LEN=*), INTENT(IN) :: filename  ! Full path for file
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
-
-        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
-
-        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
-
-        print *, "Opening nc file for reading"
-        ncretval = nf90_open(filename // ".nc4", NF90_NOWRITE, ncid)
-
-
-
-        OPEN(IOUNIT_LOAD, file=filename, action='READ', status='OLD', form="unformatted", access="stream")
-        CALL fpio(IOUNIT_LOAD, ncid, 'LOAD', cm_index)
-        CLOSE(IOUNIT_LOAD)
-        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
-        !PRINT *, 'Load walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
-    END SUBROUTINE fpmetbinary_load
-
-    SUBROUTINE fpmetbinary_zero(cm_index)
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-
-        ! Zeroes out, in local datastructures, the values dumped/loaded
-        ! This was written primarily as a testing mechanism.
-        ! DJM -- 17 February 2017 -- I don't think this routine has been used
-        ! for anything in recent past.  Might want to consider 86'ing it.
-        ! The lines here correspond to READ and WRITE in the dump/load routines
-
-        ! Scalar values
-        nx=0.0; ny=0.0; nxmin1=0.0; nymin1=0.0; nxfield=0.0
-        nuvz=0.0; nwz=0.0; nz=0.0; nmixz=0.0; nlev_ec=0.0
-        dx=0.0; dy=0.0; xlon0=0.0; ylat0=0.0; dxconst=0.0; dyconst=0.0
-
-        ! Fixed fields, static in time
-        oro=0.0; excessoro=0.0; lsm=0.0; xlanduse=0.0; height=0.0
-
-        ! 3d fields
-        uu(:,:,:,cm_index) = 0.0
-        vv(:,:,:,cm_index) = 0.0
-        uupol(:,:,:,cm_index) = 0.0
-        vvpol(:,:,:,cm_index) = 0.0
-        ww(:,:,:,cm_index) = 0.0
-        tt(:,:,:,cm_index) = 0.0
-        qv(:,:,:,cm_index) = 0.0
-        pv(:,:,:,cm_index) = 0.0
-        rho(:,:,:,cm_index) = 0.0
-        drhodz(:,:,:,cm_index) = 0.0
-        tth(:,:,:,cm_index) = 0.0
-        qvh(:,:,:,cm_index) = 0.0
-        pplev(:,:,:,cm_index) = 0.0
-        clouds(:,:,:,cm_index) = 0.0
-        cloudsh(:,:,cm_index) = 0.0
-
-        ! 2d fields
-        ps(:,:,:,cm_index) = 0.0
-        sd(:,:,:,cm_index) = 0.0
-        msl(:,:,:,cm_index) = 0.0
-        tcc(:,:,:,cm_index) = 0.0
-        u10(:,:,:,cm_index) = 0.0
-        v10(:,:,:,cm_index) = 0.0
-        tt2(:,:,:,cm_index) = 0.0
-        td2(:,:,:,cm_index) = 0.0
-        lsprec(:,:,:,cm_index) = 0.0
-        convprec(:,:,:,cm_index) = 0.0
-        sshf(:,:,:,cm_index) = 0.0
-        ssr(:,:,:,cm_index) = 0.0
-        surfstr(:,:,:,cm_index) = 0.0
-        ustar(:,:,:,cm_index) = 0.0
-        wstar(:,:,:,cm_index) = 0.0
-        hmix(:,:,:,cm_index) = 0.0
-        tropopause(:,:,:,cm_index) = 0.0
-        oli(:,:,:,cm_index) = 0.0
-        diffk(:,:,:,cm_index) = 0.0
-        vdep(:,:,:,cm_index) = 0.0
-
-        ! 1d fields
-        z0(:) = 0.0
-        akm(:) = 0.0
-        bkm(:) = 0.0
-        akz(:) = 0.0
-        bkz(:) = 0.0
-        aknew(:) = 0.0
-        bknew(:) = 0.0
-
-        ! Nested, scalar values (for each nest)
-        nxn(:) = 0.0
-        nyn(:) = 0.0
-        dxn(:) = 0.0
-        dyn(:) = 0.0
-        xlon0n(:) = 0.0
-        ylat0n(:) = 0.0
-
-        ! Nested fields, static in time
-        oron=0.0; excessoron=0.0; lsmn=0.0; xlandusen=0.0
-
-        ! 3d nested fields
-        uun(:,:,:,cm_index,:) = 0.0
-        wwn(:,:,:,cm_index,:) = 0.0
-        ttn(:,:,:,cm_index,:) = 0.0
-        qvn(:,:,:,cm_index,:) = 0.0
-        pvn(:,:,:,cm_index,:) = 0.0
-        cloudsn(:,:,:,cm_index,:) = 0.0
-        cloudsnh(:,:,cm_index,:) = 0.0
-        rhon(:,:,:,cm_index,:) = 0.0
-        drhodzn(:,:,:,cm_index,:) = 0.0
-        tthn(:,:,:,cm_index,:) = 0.0
-        qvhn(:,:,:,cm_index,:) = 0.0
-
-        ! 2d nested fields
-        psn(:,:,:,cm_index,:) = 0.0
-        sdn(:,:,:,cm_index,:) = 0.0
-        msln(:,:,:,cm_index,:) = 0.0
-        tccn(:,:,:,cm_index,:) = 0.0
-        u10n(:,:,:,cm_index,:) = 0.0
-        v10n(:,:,:,cm_index,:) = 0.0
-        tt2n(:,:,:,cm_index,:) = 0.0
-        td2n(:,:,:,cm_index,:) = 0.0
-        lsprecn(:,:,:,cm_index,:) = 0.0
-        convprecn(:,:,:,cm_index,:) = 0.0
-        sshfn(:,:,:,cm_index,:) = 0.0
-        ssrn(:,:,:,cm_index,:) = 0.0
-        surfstrn(:,:,:,cm_index,:) = 0.0
-        ustarn(:,:,:,cm_index,:) = 0.0
-        wstarn(:,:,:,cm_index,:) = 0.0
-        hmixn(:,:,:,cm_index,:) = 0.0
-        tropopausen(:,:,:,cm_index,:) = 0.0
-        olin(:,:,:,cm_index,:) = 0.0
-        diffkn(:,:,:,cm_index,:) = 0.0
-        vdepn(:,:,:,cm_index,:) = 0.0
-
-        ! Auxiliary variables for nests
-        xresoln(:) = 0.0
-        yresoln(:) = 0.0
-        xln(:) = 0.0
-        yln(:) = 0.0
-        xrn(:) = 0.0
-        yrn(:) = 0.0
-
-        ! Variables for polar stereographic projection
-        xglobal=.FALSE.; sglobal=.FALSE.; nglobal=.FALSE.
-        switchnorthg=0.0; switchsouthg=0.0
-        southpolemap(:) = 0.0
-        northpolemap(:) = 0.0
-
-        ! Variables declared in conv_mod (convection)
-        pconv(:) = 0.0
-        phconv(:) = 0.0
-        dpr(:) = 0.0
-        pconv_hpa(:) = 0.0
-        phconv_hpa(:) = 0.0
-        ft(:) = 0.0
-        fq(:) = 0.0
-        fmass(:,:) = 0.0
-        sub(:) = 0.0
-        fmassfrac(:,:) = 0.0
-        cbaseflux(:,:) = 0.0
-        cbasefluxn(:,:,:) = 0.0
-        tconv(:) = 0.0
-        qconv(:) = 0.0
-        qsconv(:) = 0.0
-        psconv=0.0; tt2conv=0.0; td2conv=0.0
-        nconvlev=0.0; nconvtop=0.0
-
-    END SUBROUTINE fpmetbinary_zero
-
-    SUBROUTINE fpio(iounit, ncid, op, cm_index)
-        IMPLICIT NONE
-        INTEGER, INTENT(IN) :: ncid               ! NetCDF file id
-        INTEGER, INTENT(IN) :: iounit
-        CHARACTER(LEN=4), INTENT(IN) :: op        ! Operation - DUMP or LOAD
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-
-        ! Helper functions (in this module)
-        !INTEGER :: logical2integer
-        !LOGICAL :: integer2logical
-
-        INTEGER :: temp_integer   ! temporary value
-        INTEGER :: ncret          ! Return value from NetCDF calls
-        INTEGER :: ncvarid          ! NetCDF variable ID
-
-        INTEGER :: nxmax_dimid, nymax_dimid, nzmax_dimid, nuvzmax_dimid, nwzmax_dimid, &
-&                  maxspec_dimid, numclass_dimid, maxnests_dimid, nxmaxn_dimid, nymaxn_dimid, &
-&                  zero_to_nzmax_dimid, zero_to_maxnests_dimid, polemap_dimid, &
-&                  nconvlevmax_dimid, na_dimid
-
-
-        INTEGER, DIMENSION(1) :: dim1dids    ! Dimension IDs for 1D arrays
-        INTEGER, DIMENSION(2) :: dim2dids    ! Dimension IDs for 2D arrays
-        INTEGER, DIMENSION(3) :: dim3dids    ! Dimension IDs for 3D arrays
-        INTEGER, DIMENSION(4) :: dim4dids    ! Dimension IDs for 4D arrays
-        INTEGER, DIMENSION(5) :: dim5dids    ! Dimension IDs for 5D arrays
-
-
-
-
-        ! These are used when loading in dimensions from NC file
-        CHARACTER(LEN=NF90_MAX_NAME) :: nxmax_dimname, nymax_dimname, nzmax_dimname, &
-&                                       nuvzmax_dimname, nwzmax_dimname,&
-&                                       maxspec_dimname, numclass_dimname,&
-&                                       maxnests_dimname, nxmaxn_dimname, nymaxn_dimname, &
-&                                       zero_to_nzmax_dimname, zero_to_maxnests_dimname, &
-&                                       polemap_dimname, nconvlevmax_dimname, na_dimname
-
-        ! These are temporary variables, used in the LOAD option, for 
-        ! comparing against the current values in FLEXPART of nxmax, nymax, ...
-        INTEGER :: temp_nxmax, temp_nymax, temp_nzmax, &
-&                  temp_nuvzmax, temp_nwzmax, &
-&                  temp_maxspec, temp_numclass,&
-&                  temp_maxnests, temp_nxmaxn, temp_nymaxn
-
-        CHARACTER(LEN=12) :: temp_preproc_format_version_str
-
-        CHARACTER(LEN=128) :: errmesg
-
-        INTEGER, PARAMETER :: DEF_LEVEL = 3
-
-        if (op == 'DUMP') THEN
-
-
-            ! Write the preprocessing format version string
-            WRITE (iounit) PREPROC_FORMAT_VERSION_STR
-
-            ! Write the compiled max dimensions from par_mod - these are
-            ! not meant to be reassigned during a LOAD, but used as "header"
-            ! information to provide the structure of arrays
-            WRITE (iounit) nxmax, nymax, nzmax, nuvzmax, nwzmax
-
-            ncret = nf90_def_dim(ncid, 'nxmax', nxmax, nxmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nymax', nymax, nymax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nzmax', nzmax, nzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nuvzmax', nuvzmax, nuvzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nwzmax', nwzmax, nwzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'maxspec', maxspec, maxspec_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'numclass', numclass, numclass_dimid)
-            call handle_nf90_err(ncret)
-
-            ! There are a handful of variables indexed from 0 to n, rather than 0 to n-1,
-            ! so these dimensions handle that.  What a pain.
-            ncret = nf90_def_dim(ncid, 'zero_to_nzmax', nzmax+1, zero_to_nzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'zero_to_maxnests', maxnests+1, zero_to_maxnests_dimid)
-            call handle_nf90_err(ncret)
-
-            ! This is for a couple of small arrays that store polar stereographic stuff
-            ncret = nf90_def_dim(ncid, 'polemap_dim', 9, polemap_dimid)
-            call handle_nf90_err(ncret)
-
-            ! These two values come from conv_mod
-            ncret = nf90_def_dim(ncid, 'nconvlevmax_dim', nconvlevmax, nconvlevmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'na_dim', na, na_dimid)
-            call handle_nf90_err(ncret)
-
-            ! Scalar values
-            WRITE(iounit) nx, ny, nxmin1, nymin1, nxfield
-            WRITE(iounit) nuvz, nwz, nz, nmixz, nlev_ec
-            WRITE(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
-
-            ncret = nf90_def_var(ncid, 'nx', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nx)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ny', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, ny)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nxmin1', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nxmin1)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nymin1', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nymin1)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nxfield', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nxfield)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nuvz', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nuvz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nwz', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nwz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nz', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nmixz', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nmixz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nlev_ec', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nlev_ec)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dx', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, dx)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dy', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, dy)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'xlon0', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, xlon0)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ylat0', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, ylat0)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dxconst', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, dxconst)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dyconst', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, dyconst)
-            call handle_nf90_err(ncret)
-
-
-
-            ! Fixed fields, static in time
-            WRITE(iounit) oro, excessoro, lsm, xlanduse, height
-
-            dim2dids = (/nxmax_dimid, nymax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'oro', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                oro(0:nxmax-1, 0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'excessoro', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                excessoro(0:nxmax-1, 0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'lsm', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                lsm(0:nxmax-1, 0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            dim3dids = (/nxmax_dimid, nymax_dimid, numclass_dimid/)
-            ! numclass comes from par_mod - number of land use classes
-            ncret = nf90_def_var(ncid, 'xlanduse', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xlanduse(0:nxmax-1, 0:nymax-1, 1:numclass))
-            call handle_nf90_err(ncret)
-
-            dim1dids = (/nzmax_dimid/)
-            ncret = nf90_def_var(ncid, 'height', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                height(1:nzmax))
-            call handle_nf90_err(ncret)
-
-
-
-
-            ! 3d fields
-            WRITE(iounit) uu(:,:,:,cm_index)
-            WRITE(iounit) vv(:,:,:,cm_index)
-            WRITE(iounit) uupol(:,:,:,cm_index)
-            WRITE(iounit) vvpol(:,:,:,cm_index)
-            WRITE(iounit) ww(:,:,:,cm_index)
-            WRITE(iounit) tt(:,:,:,cm_index)
-            WRITE(iounit) qv(:,:,:,cm_index)
-            WRITE(iounit) pv(:,:,:,cm_index)
-            WRITE(iounit) rho(:,:,:,cm_index)
-            WRITE(iounit) drhodz(:,:,:,cm_index)
-            WRITE(iounit) tth(:,:,:,cm_index)
-            WRITE(iounit) qvh(:,:,:,cm_index)
-            WRITE(iounit) pplev(:,:,:,cm_index)
-            WRITE(iounit) clouds(:,:,:,cm_index)
-            WRITE(iounit) cloudsh(:,:,cm_index)
-
-            dim3dids = (/nxmax_dimid, nymax_dimid, nzmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'uu', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                uu(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'vv', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                vv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'uupol', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                uupol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'vvpol', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                vvpol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ww', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ww(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tt', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'qv', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'pv', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                pv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'rho', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                rho(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'drhodz', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                drhodz(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'clouds', NF90_BYTE, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-            ! Note the change in z dimension for the following
-            dim3dids = (/nxmax_dimid, nymax_dimid, nuvzmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'tth', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tth(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'qvh', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qvh(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'pplev', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                pplev(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
-            call handle_nf90_err(ncret)
-
-
-            dim2dids = (/nxmax_dimid, nymax_dimid/)
-            ncret = nf90_def_var(ncid, 'cloudsh', NF90_INT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                cloudsh(0:nxmax-1, 0:nymax-1, cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
-&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
-
-            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
-&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
-
-
-
-            ! 2d fields
-            WRITE(iounit) ps(:,:,:,cm_index)
-            WRITE(iounit) sd(:,:,:,cm_index)
-            WRITE(iounit) msl(:,:,:,cm_index)
-            WRITE(iounit) tcc(:,:,:,cm_index)
-            WRITE(iounit) u10(:,:,:,cm_index)
-            WRITE(iounit) v10(:,:,:,cm_index)
-            WRITE(iounit) tt2(:,:,:,cm_index)
-            WRITE(iounit) td2(:,:,:,cm_index)
-            WRITE(iounit) lsprec(:,:,:,cm_index)
-            WRITE(iounit) convprec(:,:,:,cm_index)
-            WRITE(iounit) sshf(:,:,:,cm_index)
-            WRITE(iounit) ssr(:,:,:,cm_index)
-            WRITE(iounit) surfstr(:,:,:,cm_index)
-            WRITE(iounit) ustar(:,:,:,cm_index)
-            WRITE(iounit) wstar(:,:,:,cm_index)
-            WRITE(iounit) hmix(:,:,:,cm_index)
-            WRITE(iounit) tropopause(:,:,:,cm_index)
-            WRITE(iounit) oli(:,:,:,cm_index)
-            WRITE(iounit) diffk(:,:,:,cm_index)
-            WRITE(iounit) vdep(:,:,:,cm_index)
-
-            dim2dids = (/nxmax_dimid, nymax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'ps', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ps(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'sd', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                sd(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'msl', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                msl(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tcc', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tcc(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'u10', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                u10(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'v10', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                v10(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tt2', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tt2(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'td2', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                td2(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'lsprec', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                lsprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'convprec', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                convprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'sshf', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                sshf(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ssr', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ssr(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'surfstr', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                surfstr(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ustar', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ustar(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'wstar', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                wstar(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'hmix', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                hmix(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tropopause', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tropopause(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'oli', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                oli(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'diffk', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                diffk(0:nxmax-1, 0:nymax-1, 1, cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
-&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
-
-            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
-&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
-
-
-            dim3dids = (/nxmax_dimid, nymax_dimid, maxspec_dimid/)
-
-            ncret = nf90_def_var(ncid, 'vdep', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                vdep(0:nxmax-1, 0:nymax-1, 1:maxspec, cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-            ! 1d fields
-            WRITE(iounit) z0(:)
-            WRITE(iounit) akm(:)
-            WRITE(iounit) bkm(:)
-            WRITE(iounit) akz(:)
-            WRITE(iounit) bkz(:)
-            WRITE(iounit) aknew(:)
-            WRITE(iounit) bknew(:)
-
-            dim1dids = (/numclass_dimid/)
-
-            ncret = nf90_def_var(ncid, 'z0', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                z0(1:numclass))
-
-
-            dim1dids = (/nwzmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'akm', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                akm(1:nwzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'bkm', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                bkm(1:nwzmax))
-            call handle_nf90_err(ncret)
-
-
-            dim1dids = (/nuvzmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'akz', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                akz(1:nuvzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'bkz', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                bkz(1:nuvzmax))
-            call handle_nf90_err(ncret)
-
-
-            dim1dids = (/nzmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'aknew', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                aknew(1:nzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'bknew', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                bknew(1:nzmax))
-            call handle_nf90_err(ncret)
-
-
-            PRINT *, 'SUM(bknew(1:nzmax)): ', &
-&                                        SUM(bknew(1:nzmax))
-
-
-
-            ! Getting ready to add in nested code
-
-            ! These are compiled max dimensions from par_mod - these are
-            ! not meant to be reassigned during a LOAD, but used as "header"
-            ! information to provide the structure of arrays
-            ncret = nf90_def_dim(ncid, 'maxnests', maxnests, maxnests_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nxmaxn', nxmaxn, nxmaxn_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_dim(ncid, 'nymaxn', nymaxn, nymaxn_dimid)
-            call handle_nf90_err(ncret)
-
-            WRITE(iounit) nxn(:)
-            WRITE(iounit) nyn(:)
-            WRITE(iounit) dxn(:)
-            WRITE(iounit) dyn(:)
-            WRITE(iounit) xlon0n(:)
-            WRITE(iounit) ylat0n(:)
-
-            ! Nested, scalar values (for each nest)
-
-            dim1dids = (/maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'nxn', NF90_INT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                nxn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nyn', NF90_INT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                nyn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dxn', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                dxn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'dyn', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                dyn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'xlon0n', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xlon0n(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ylat0n', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ylat0n(1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-
-            ! Nested fields, static over time
-            WRITE(iounit) oron, excessoron, lsmn, xlandusen 
-
-            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'oron', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                oron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'excessoron', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                excessoron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'lsmn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                lsmn(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, numclass_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'xlandusen', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xlandusen(0:nxmaxn-1, 0:nymaxn-1, 1:numclass, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            PRINT *, 'SUM(oron): ', SUM(oron)
-
-
-
-            ! 3d nested fields
-            WRITE(iounit) uun(:,:,:,cm_index,:)
-            WRITE(iounit) vvn(:,:,:,cm_index,:)
-            WRITE(iounit) wwn(:,:,:,cm_index,:)
-            WRITE(iounit) ttn(:,:,:,cm_index,:)
-            WRITE(iounit) qvn(:,:,:,cm_index,:)
-            WRITE(iounit) pvn(:,:,:,cm_index,:)
-            WRITE(iounit) cloudsn(:,:,:,cm_index,:)
-            WRITE(iounit) cloudsnh(:,:,cm_index,:)
-            WRITE(iounit) rhon(:,:,:,cm_index,:)
-            WRITE(iounit) drhodzn(:,:,:,cm_index,:)
-            WRITE(iounit) tthn(:,:,:,cm_index,:)
-            WRITE(iounit) qvhn(:,:,:,cm_index,:)
-
-
-            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nzmax_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'uun', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                uun(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'vvn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                vvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'wwn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                wwn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ttn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ttn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'qvn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'pvn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                pvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'rhon', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                rhon(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'drhodzn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                drhodzn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-            ! Note the new dimensions
-            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nuvzmax_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'tthn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tthn(0:nxmaxn-1, 0:nymaxn-1, 1:nuvzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'qvhn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qvhn(0:nxmaxn-1, 0:nymaxn-1, 1:nuvzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ! Note the new dimensions
-            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, zero_to_nzmax_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'cloudsn', NF90_INT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                cloudsn(0:nxmaxn-1, 0:nymaxn-1, 0:nzmax, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ! Note the new dimensions
-            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'cloudsnh', NF90_INT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                cloudsnh(0:nxmaxn-1, 0:nymaxn-1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-
-
-
-
-
-
-            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
-            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
-
-
-
-            ! 2d nested fields
-            WRITE(iounit) psn(:,:,:,cm_index,:)
-            WRITE(iounit) sdn(:,:,:,cm_index,:)
-            WRITE(iounit) msln(:,:,:,cm_index,:)
-            WRITE(iounit) tccn(:,:,:,cm_index,:)
-            WRITE(iounit) u10n(:,:,:,cm_index,:)
-            WRITE(iounit) v10n(:,:,:,cm_index,:)
-            WRITE(iounit) tt2n(:,:,:,cm_index,:)
-            WRITE(iounit) td2n(:,:,:,cm_index,:)
-            WRITE(iounit) lsprecn(:,:,:,cm_index,:)
-            WRITE(iounit) convprecn(:,:,:,cm_index,:)
-            WRITE(iounit) sshfn(:,:,:,cm_index,:)
-            WRITE(iounit) ssrn(:,:,:,cm_index,:)
-            WRITE(iounit) surfstrn(:,:,:,cm_index,:)
-            WRITE(iounit) ustarn(:,:,:,cm_index,:)
-            WRITE(iounit) wstarn(:,:,:,cm_index,:)
-            WRITE(iounit) hmixn(:,:,:,cm_index,:)
-            WRITE(iounit) tropopausen(:,:,:,cm_index,:)
-            WRITE(iounit) olin(:,:,:,cm_index,:)
-            WRITE(iounit) diffkn(:,:,:,cm_index,:)
-            WRITE(iounit) vdepn(:,:,:,cm_index,:)
-
-            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'psn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                psn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'sdn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                sdn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'msln', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                msln(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tccn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tccn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'u10n', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                u10n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'v10n', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                v10n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tt2n', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tt2n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'td2n', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                td2n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'lsprecn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                lsprecn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'convprecn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                convprecn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'sshfn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                sshfn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ssrn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ssrn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'surfstrn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                surfstrn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'ustarn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ustarn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'wstarn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                wstarn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'hmixn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                hmixn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tropopausen', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tropopausen(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'olin', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                olin(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'diffkn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                diffkn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, maxspec_dimid, maxnests_dimid/)
-
-
-
-            ncret = nf90_def_var(ncid, 'vdepn', NF90_FLOAT, &
-&                                       dim4dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                vdepn(0:nxmaxn-1, 0:nymaxn-1, 1:maxspec, cm_index, 1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
-
-
-
-
-
-            ! Auxiliary variables for nests
-            WRITE(iounit) xresoln(:)
-            WRITE(iounit) yresoln(:)
-            WRITE(iounit) xln(:)
-            WRITE(iounit) yln(:)
-            WRITE(iounit) xrn(:)
-            WRITE(iounit) yrn(:)
-
-            dim1dids = (/zero_to_maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'xresoln', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xresoln(0:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'yresoln', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                yresoln(0:maxnests))
-            call handle_nf90_err(ncret)
-
-            dim1dids = (/maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'xln', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xln(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'yln', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                yln(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'xrn', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                xrn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'yrn', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                yrn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
-            PRINT *, 'SUM(xrn): ', SUM(xrn)
-
-
-
-            ! Variables for polar stereographic projection
-            WRITE(iounit) xglobal, sglobal, nglobal
-            WRITE(iounit) switchnorthg, switchsouthg
-            WRITE(iounit) southpolemap(:)
-            WRITE(iounit) northpolemap(:)
-
-
-
-            dim1dids = (/polemap_dimid/)
-
-            ncret = nf90_def_var(ncid, 'southpolemap', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                southpolemap(:))
-
-            ncret = nf90_def_var(ncid, 'northpolemap', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                northpolemap(:))
-
-
-
-            ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
-            ! to INTEGER for NetCDF storage
-            ncret = nf90_def_var(ncid, 'xglobal', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, logical2integer(xglobal))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'sglobal', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, logical2integer(sglobal))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nglobal', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, logical2integer(nglobal))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'switchnorthg', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, switchnorthg)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'switchsouthg', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, switchsouthg)
-            call handle_nf90_err(ncret)
-
-
-
-            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
-            PRINT *, 'xglobal: ', xglobal
-            PRINT *, 'sglobal: ', sglobal
-            PRINT *, 'nglobal: ', nglobal
-            PRINT *, 'switchsouthg: ', switchsouthg
-
-            ! Variables declared in conv_mod (convection)
-            WRITE(iounit) pconv(:)
-            WRITE(iounit) phconv(:)
-            WRITE(iounit) dpr(:)
-            WRITE(iounit) pconv_hpa(:)
-            WRITE(iounit) phconv_hpa(:)
-            WRITE(iounit) ft(:)
-            WRITE(iounit) fq(:)
-            WRITE(iounit) fmass(:,:)
-            WRITE(iounit) sub(:)
-            WRITE(iounit) fmassfrac(:,:)
-            WRITE(iounit) cbaseflux(:,:)
-            WRITE(iounit) cbasefluxn(:,:,:)
-            WRITE(iounit) tconv(:)
-            WRITE(iounit) qconv(:)
-            WRITE(iounit) qsconv(:)
-            WRITE(iounit) psconv, tt2conv, td2conv
-            WRITE(iounit) nconvlev, nconvtop
-
-
-            dim1dids = (/nconvlevmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'pconv', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                pconv(:))
-
-            ncret = nf90_def_var(ncid, 'dpr', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                dpr(:))
-
-            ncret = nf90_def_var(ncid, 'pconv_hpa', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                pconv_hpa(:))
-
-            ncret = nf90_def_var(ncid, 'ft', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                ft(:))
-
-            ncret = nf90_def_var(ncid, 'fq', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                fq(:))
-
-            ncret = nf90_def_var(ncid, 'sub', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                sub(:))
-
-            dim1dids = (/na_dimid/)
-
-            ncret = nf90_def_var(ncid, 'phconv', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                phconv(:))
-
-            ncret = nf90_def_var(ncid, 'phconv_hpa', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                phconv_hpa(:))
-
-            ncret = nf90_def_var(ncid, 'tconv', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                tconv(:))
-
-            ncret = nf90_def_var(ncid, 'qconv', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qconv(:))
-
-            ncret = nf90_def_var(ncid, 'qsconv', NF90_FLOAT, &
-&                                       dim1dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                qsconv(:))
-
-            ! New dimensions
-            dim2dids = (/nconvlevmax_dimid, nconvlevmax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'fmass', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                fmass(:,:))
-
-            ncret = nf90_def_var(ncid, 'fmassfrac', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                fmassfrac(:,:))
-
-
-            ! New dimensions
-            dim2dids = (/nxmax_dimid, nymax_dimid/)
-
-            ncret = nf90_def_var(ncid, 'cbaseflux', NF90_FLOAT, &
-&                                       dim2dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                cbaseflux(0:nxmax-1,0:nymax-1))
-
-            ! New dimensions
-            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
-
-            ncret = nf90_def_var(ncid, 'cbasefluxn', NF90_FLOAT, &
-&                                       dim3dids, ncvarid)
-            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
-&                                        shuffle=0,     &
-&                                        deflate=1,     &
-&                                        deflate_level=DEF_LEVEL)
-            ncret = nf90_put_var(ncid, ncvarid, &
-&                                cbasefluxn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
-
-
-            ! Scalars
-            ncret = nf90_def_var(ncid, 'psconv', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, psconv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'tt2conv', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, tt2conv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'td2conv', NF90_FLOAT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, td2conv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nconvlev', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nconvlev)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_def_var(ncid, 'nconvtop', NF90_INT, ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_put_var(ncid, ncvarid, nconvtop)
-            call handle_nf90_err(ncret)
-
-            PRINT *, 'SUM(pconv): ', SUM(pconv)
-            PRINT *, 'SUM(qconv): ', SUM(qconv)
-            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
-            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
-            PRINT *, 'tt2conv: ', tt2conv
-            PRINT *, 'nconvlev: ', nconvlev
-
-
-
-        ELSE IF (op == 'LOAD') THEN 
-
-            ! Read the preprocessed format version string and insure it
-            ! matches this version
-            READ (iounit) temp_preproc_format_version_str
-            PRINT *, 'Reading preprocessed file format version: ', &
-&                    temp_preproc_format_version_str
-
-            IF (TRIM(temp_preproc_format_version_str) == &
-&                                        TRIM(PREPROC_FORMAT_VERSION_STR)) THEN
-                CONTINUE
-            ELSE
-                ! PRINT *, ''  GK: causes relocation truncated to fit: R_X86_64_32
-                PRINT *, 'Inconsistent preprocessing format version'
-                PRINT *, 'Expected Version: ', PREPROC_FORMAT_VERSION_STR
-                PRINT *, 'Detected Version: ', temp_preproc_format_version_str
-                ! PRINT *, ''
-                STOP
-            END IF
-
-            ! Read the compiled max dimensions that were dumped from par_mod 
-            ! when creating the fp file, so that we can compare against
-            ! current FLEXPART dimensions - they need to be the same, or else
-            ! we abort.
-            READ (iounit) temp_nxmax, temp_nymax, temp_nzmax, &
-&                         temp_nuvzmax, temp_nwzmax
-
-            ! Get dimensions
-            ncret = nf90_inq_dimid(ncid, 'nxmax', nxmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nxmax_dimid, nxmax_dimname, &
-&                                                temp_nxmax)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nxmax: ', temp_nxmax
-
-            ncret = nf90_inq_dimid(ncid, 'nymax', nymax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nymax_dimid, nymax_dimname, &
-&                                                temp_nymax)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nymax: ', temp_nymax
-
-            ncret = nf90_inq_dimid(ncid, 'nzmax', nzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nzmax_dimid, nzmax_dimname, &
-&                                                temp_nzmax)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nzmax: ', temp_nzmax
-
-            ncret = nf90_inq_dimid(ncid, 'nuvzmax', nuvzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nuvzmax_dimid, nuvzmax_dimname, &
-&                                                temp_nuvzmax)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nuvzmax: ', temp_nuvzmax
-
-            ncret = nf90_inq_dimid(ncid, 'nwzmax', nwzmax_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nwzmax_dimid, nwzmax_dimname, &
-&                                                temp_nwzmax)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nwzmax: ', temp_nwzmax
-
-            ncret = nf90_inq_dimid(ncid, 'numclass', numclass_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, numclass_dimid, numclass_dimname, &
-&                                                temp_numclass)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_numclass: ', temp_numclass
-
-            ncret = nf90_inq_dimid(ncid, 'maxspec', maxspec_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, maxspec_dimid, maxspec_dimname, &
-&                                                temp_maxspec)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_maxspec: ', temp_maxspec
-
-
-
-            IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. &
-&                   (temp_nzmax == nzmax) .AND. &
-&                   (temp_nuvzmax == nuvzmax) .AND. &
-&                   (temp_nwzmax == nwzmax) .AND. &
-&                   (temp_numclass == numclass) .AND. &
-&                   (temp_maxspec == maxspec) ) THEN
-                CONTINUE
-            ELSE
-                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
-                ! PRINT *, ''
-                PRINT *, '                  FP file     Compiled FP'
-                PRINT *, 'nxmax:     ', temp_nxmax, '    ', nxmax 
-                PRINT *, 'nymax:     ', temp_nymax, '    ', nymax 
-                PRINT *, 'nzmax:     ', temp_nzmax, '    ', nzmax 
-                PRINT *, 'nuvzmax:     ', temp_nuvzmax, '    ', nuvzmax 
-                PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax
-                PRINT *, 'numclass:     ', temp_numclass, '    ', numclass
-                PRINT *, 'maxspec:     ', temp_maxspec, '    ', maxspec
-                ! PRINT *, ''
-                STOP
-            END IF
-
-
-
-
-            ! Scalar values
-            READ(iounit) nx, ny, nxmin1, nymin1, nxfield
-            READ(iounit) nuvz, nwz, nz, nmixz, nlev_ec
-            READ(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
-
-
-
-            ! Get the varid , then read into scalar variable
-            ncret = nf90_inq_varid(ncid, 'nx', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nx)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ny', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ny)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nxmin1', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nxmin1)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nymin1', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nymin1)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nxfield', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nxfield)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nuvz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nuvz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nwz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nwz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nmixz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nmixz)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nlev_ec', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nlev_ec)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dx', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dx)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dy', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dy)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xlon0', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xlon0)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ylat0', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ylat0)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dxconst', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dxconst)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dyconst', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dyconst)
-            call handle_nf90_err(ncret)
-
-
-
-
-
-
-            ! Fixed fields, static in time
-            READ(iounit) oro, excessoro, lsm, xlanduse, height
-
-            ncret = nf90_inq_varid(ncid, 'oro', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, oro(0:nxmax-1,0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'excessoro', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, excessoro(0:nxmax-1,0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'lsm', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, lsm(0:nxmax-1,0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xlanduse', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xlanduse(0:nxmax-1,0:nymax-1, 1:numclass))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'height', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, height(1:nzmax))
-            call handle_nf90_err(ncret)
-
-
-
-
-            ! 3d fields
-            READ(iounit) uu(:,:,:,cm_index)
-            READ(iounit) vv(:,:,:,cm_index)
-            READ(iounit) uupol(:,:,:,cm_index)
-            READ(iounit) vvpol(:,:,:,cm_index)
-            READ(iounit) ww(:,:,:,cm_index)
-            READ(iounit) tt(:,:,:,cm_index)
-            READ(iounit) qv(:,:,:,cm_index)
-            READ(iounit) pv(:,:,:,cm_index)
-            READ(iounit) rho(:,:,:,cm_index)
-            READ(iounit) drhodz(:,:,:,cm_index)
-            READ(iounit) tth(:,:,:,cm_index)
-            READ(iounit) qvh(:,:,:,cm_index)
-            READ(iounit) pplev(:,:,:,cm_index)
-            READ(iounit) clouds(:,:,:,cm_index)
-            READ(iounit) cloudsh(:,:,cm_index)
-
-
-
-
-            ! Get the varid and read the variable into the array
-            ncret = nf90_inq_varid(ncid, 'uu', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, uu(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'vv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, vv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'uupol', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, uupol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'vvpol', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, vvpol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ww', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ww(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tt', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tt(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'pv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, pv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'rho', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, rho(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'drhodz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, drhodz(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'clouds', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, clouds(0:nxmax-1,0:nzmax-1,1:nzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tth', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tth(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qvh', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qvh(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'pplev', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, pplev(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'cloudsh', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, cloudsh(0:nxmax-1,0:nymax-1,cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
-&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
-
-
-            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
-&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
-
-
-
-            ! 2d fields
-            READ(iounit) ps(:,:,:,cm_index)
-            READ(iounit) sd(:,:,:,cm_index)
-            READ(iounit) msl(:,:,:,cm_index)
-            READ(iounit) tcc(:,:,:,cm_index)
-            READ(iounit) u10(:,:,:,cm_index)
-            READ(iounit) v10(:,:,:,cm_index)
-            READ(iounit) tt2(:,:,:,cm_index)
-            READ(iounit) td2(:,:,:,cm_index)
-            READ(iounit) lsprec(:,:,:,cm_index)
-            READ(iounit) convprec(:,:,:,cm_index)
-            READ(iounit) sshf(:,:,:,cm_index)
-            READ(iounit) ssr(:,:,:,cm_index)
-            READ(iounit) surfstr(:,:,:,cm_index)
-            READ(iounit) ustar(:,:,:,cm_index)
-            READ(iounit) wstar(:,:,:,cm_index)
-            READ(iounit) hmix(:,:,:,cm_index)
-            READ(iounit) tropopause(:,:,:,cm_index)
-            READ(iounit) oli(:,:,:,cm_index)
-            READ(iounit) diffk(:,:,:,cm_index)
-            READ(iounit) vdep(:,:,:,cm_index)
-
-            ! Get the varid and read the variable into the array
-            ncret = nf90_inq_varid(ncid, 'ps', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ps(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'sd', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, sd(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'msl', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, msl(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tcc', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tcc(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'u10', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, u10(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'v10', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, v10(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tt2', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tt2(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'td2', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, td2(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'lsprec', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, lsprec(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'convprec', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, convprec(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'sshf', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, sshf(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ssr', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ssr(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'surfstr', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, surfstr(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ustar', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ustar(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'wstar', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, wstar(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'hmix', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, hmix(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tropopause', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tropopause(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'oli', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, oli(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'diffk', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, diffk(0:nxmax-1,0:nymax-1,1,cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
-&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
-
-            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
-&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
-
-
-            ncret = nf90_inq_varid(ncid, 'vdep', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, vdep(0:nxmax-1,0:nymax-1,1:maxspec, cm_index))
-            call handle_nf90_err(ncret)
-
-
-
-
-
-            ! 1d fields
-            READ(iounit) z0(:)
-            READ(iounit) akm(:)
-            READ(iounit) bkm(:)
-            READ(iounit) akz(:)
-            READ(iounit) bkz(:)
-            READ(iounit) aknew(:)
-            READ(iounit) bknew(:)
-
-
-            ncret = nf90_inq_varid(ncid, 'z0', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, z0(1:numclass))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'akm', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, akm(1:nwzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'bkm', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, bkm(1:nwzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'akz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, akz(1:nuvzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'bkz', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, bkz(1:nuvzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'aknew', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, aknew(1:nzmax))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'bknew', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, bknew(1:nzmax))
-            call handle_nf90_err(ncret)
-
-
-
-            PRINT *, 'SUM(bknew(1:nzmax)): ', &
-&                                        SUM(bknew(1:nzmax))
-
-
-
-
-            ! Now the nested input grid variables
-            ! Get the compiled values that were written into the FP file, and
-            ! make sure they are equal to the current compiled values, to make
-            ! sure we are working with consistent arrays
-            ncret = nf90_inq_dimid(ncid, 'maxnests', maxnests_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, maxnests_dimid, maxnests_dimname, &
-&                                                temp_maxnests)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_maxnests: ', temp_maxnests
-
-            ncret = nf90_inq_dimid(ncid, 'nxmaxn', nxmaxn_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nxmaxn_dimid, nxmaxn_dimname, &
-&                                                temp_nxmaxn)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nxmaxn: ', temp_nxmaxn
-
-            ncret = nf90_inq_dimid(ncid, 'nymaxn', nymaxn_dimid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_inquire_dimension(ncid, nymaxn_dimid, nymaxn_dimname, &
-&                                                temp_nymaxn)
-            call handle_nf90_err(ncret)
-            PRINT *, 'temp_nymaxn: ', temp_nymaxn
-
-            ! Note that maxspec_dimid and numclass_dimid were checked above
-
-
-
-
-            IF ( (temp_nxmaxn == nxmaxn) .AND. (temp_nymaxn == nymaxn) .AND. &
-&                   (temp_maxnests == maxnests) ) THEN
-                CONTINUE
-            ELSE
-                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
-                ! PRINT *, ''
-                PRINT *, '                  FP file     Compiled FP'
-                PRINT *, 'nxmaxn:     ', temp_nxmaxn, '    ', nxmaxn
-                PRINT *, 'nymaxn:     ', temp_nymaxn, '    ', nymaxn
-                PRINT *, 'maxnests:     ', temp_maxnests, '    ', maxnests
-                STOP
-            END IF
-
-
-
-            ! Nested, scalar values (for each nest)
-            READ(iounit) nxn(:)
-            READ(iounit) nyn(:)
-            READ(iounit) dxn(:)
-            READ(iounit) dyn(:)
-            READ(iounit) xlon0n(:)
-            READ(iounit) ylat0n(:)
-
-
-            ncret = nf90_inq_varid(ncid, 'nxn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nxn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nyn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nyn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dxn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dxn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dyn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dyn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xlon0n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xlon0n(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ylat0n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ylat0n(1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-            ! Nested fields, static over time
-            READ(iounit) oron, excessoron, lsmn, xlandusen 
-
-            ncret = nf90_inq_varid(ncid, 'oron', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, oron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'excessoron', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, excessoron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'lsmn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, lsmn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xlandusen', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xlandusen(0:nxmaxn-1,0:nymaxn-1,1:numclass,1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-            PRINT *, 'SUM(oron): ', SUM(oron)
-
-
-
-
-            ! 3d nested fields
-            READ(iounit) uun(:,:,:,cm_index,:)
-            READ(iounit) vvn(:,:,:,cm_index,:)
-            READ(iounit) wwn(:,:,:,cm_index,:)
-            READ(iounit) ttn(:,:,:,cm_index,:)
-            READ(iounit) qvn(:,:,:,cm_index,:)
-            READ(iounit) pvn(:,:,:,cm_index,:)
-            READ(iounit) cloudsn(:,:,:,cm_index,:)
-            READ(iounit) cloudsnh(:,:,cm_index,:)
-            READ(iounit) rhon(:,:,:,cm_index,:)
-            READ(iounit) drhodzn(:,:,:,cm_index,:)
-            READ(iounit) tthn(:,:,:,cm_index,:)
-            READ(iounit) qvhn(:,:,:,cm_index,:)
-
-
-            ncret = nf90_inq_varid(ncid, 'uun', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, uun(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'vvn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, vvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'wwn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, wwn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ttn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ttn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qvn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'pvn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, pvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'rhon', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, rhon(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'drhodzn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, drhodzn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tthn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tthn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qvhn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qvhn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'cloudsn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, cloudsn(0:nxmaxn-1,0:nymaxn-1,0:nzmax,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'cloudsnh', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, cloudsnh(0:nxmaxn-1,0:nymaxn-1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
-            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
-
-
-
-
-            ! 2d nested fields
-            READ(iounit) psn(:,:,:,cm_index,:)
-            READ(iounit) sdn(:,:,:,cm_index,:)
-            READ(iounit) msln(:,:,:,cm_index,:)
-            READ(iounit) tccn(:,:,:,cm_index,:)
-            READ(iounit) u10n(:,:,:,cm_index,:)
-            READ(iounit) v10n(:,:,:,cm_index,:)
-            READ(iounit) tt2n(:,:,:,cm_index,:)
-            READ(iounit) td2n(:,:,:,cm_index,:)
-            READ(iounit) lsprecn(:,:,:,cm_index,:)
-            READ(iounit) convprecn(:,:,:,cm_index,:)
-            READ(iounit) sshfn(:,:,:,cm_index,:)
-            READ(iounit) ssrn(:,:,:,cm_index,:)
-            READ(iounit) surfstrn(:,:,:,cm_index,:)
-            READ(iounit) ustarn(:,:,:,cm_index,:)
-            READ(iounit) wstarn(:,:,:,cm_index,:)
-            READ(iounit) hmixn(:,:,:,cm_index,:)
-            READ(iounit) tropopausen(:,:,:,cm_index,:)
-            READ(iounit) olin(:,:,:,cm_index,:)
-            READ(iounit) diffkn(:,:,:,cm_index,:)
-            READ(iounit) vdepn(:,:,:,cm_index,:)
-
-            ncret = nf90_inq_varid(ncid, 'psn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, psn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'sdn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, sdn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'msln', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, msln(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tccn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tccn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'u10n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, u10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'v10n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, v10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tt2n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tt2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'td2n', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, td2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'lsprecn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, lsprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'convprecn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, convprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'sshfn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, sshfn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ssrn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ssrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'surfstrn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, surfstrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ustarn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ustarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'wstarn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, wstarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'hmixn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, hmixn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tropopausen', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tropopausen(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'olin', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, olin(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'diffkn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, diffkn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'vdepn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, vdepn(0:nxmaxn-1,0:nymaxn-1,1:maxspec,cm_index,1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
-            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
-
-
-
-            ! Auxiliary variables for nests
-            READ(iounit) xresoln(:)
-            READ(iounit) yresoln(:)
-            READ(iounit) xln(:)
-            READ(iounit) yln(:)
-            READ(iounit) xrn(:)
-            READ(iounit) yrn(:)
-
-            ncret = nf90_inq_varid(ncid, 'xresoln', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xresoln(0:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'yresoln', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, yresoln(0:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xln', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xln(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'yln', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, yln(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'xrn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, xrn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'yrn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, yrn(1:maxnests))
-            call handle_nf90_err(ncret)
-
-
-
-            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
-            PRINT *, 'SUM(xrn): ', SUM(xrn)
-
-
-
-            ! Variables for polar stereographic projection
-            READ(iounit) xglobal, sglobal, nglobal
-            READ(iounit) switchnorthg, switchsouthg
-            READ(iounit) southpolemap(:)
-            READ(iounit) northpolemap(:)
-
-
-            ncret = nf90_inq_varid(ncid, 'southpolemap', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, southpolemap(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'northpolemap', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, northpolemap(:))
-            call handle_nf90_err(ncret)
-
-            ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
-            ! to INTEGER for NetCDF storage
-            ncret = nf90_inq_varid(ncid, 'xglobal', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
-            call handle_nf90_err(ncret)
-            xglobal = integer2logical(temp_integer)
-
-            ncret = nf90_inq_varid(ncid, 'sglobal', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
-            call handle_nf90_err(ncret)
-            sglobal = integer2logical(temp_integer)
-
-            ncret = nf90_inq_varid(ncid, 'nglobal', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
-            call handle_nf90_err(ncret)
-            nglobal = integer2logical(temp_integer)
-
-            ncret = nf90_inq_varid(ncid, 'switchnorthg', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, switchnorthg)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'switchsouthg', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, switchsouthg)
-            call handle_nf90_err(ncret)
-
-
-            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
-            PRINT *, 'xglobal: ', xglobal
-            PRINT *, 'sglobal: ', sglobal
-            PRINT *, 'nglobal: ', nglobal
-            PRINT *, 'switchsouthg: ', switchsouthg
-
-
-
-
-            ! Variables declared in conv_mod (convection)
-            READ(iounit) pconv(:)
-            READ(iounit) phconv(:)
-            READ(iounit) dpr(:)
-            READ(iounit) pconv_hpa(:)
-            READ(iounit) phconv_hpa(:)
-            READ(iounit) ft(:)
-            READ(iounit) fq(:)
-            READ(iounit) fmass(:,:)
-            READ(iounit) sub(:)
-            READ(iounit) fmassfrac(:,:)
-            READ(iounit) cbaseflux(:,:)
-            READ(iounit) cbasefluxn(:,:,:)
-            READ(iounit) tconv(:)
-            READ(iounit) qconv(:)
-            READ(iounit) qsconv(:)
-            READ(iounit) psconv, tt2conv, td2conv
-            READ(iounit) nconvlev, nconvtop
-
-            ncret = nf90_inq_varid(ncid, 'pconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, pconv(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'dpr', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, dpr(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'pconv_hpa', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, pconv_hpa(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'ft', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, ft(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'fq', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, fq(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'sub', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, sub(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'phconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, phconv(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'phconv_hpa', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, phconv_hpa(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tconv(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qconv(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'qsconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, qsconv(:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'fmass', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, fmass(:,:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'fmassfrac', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, fmassfrac(:,:))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'cbaseflux', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, cbaseflux(0:nxmax-1,0:nymax-1))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'cbasefluxn', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, cbasefluxn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'psconv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, psconv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'tt2conv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, tt2conv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'td2conv', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, td2conv)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nconvlev', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nconvlev)
-            call handle_nf90_err(ncret)
-
-            ncret = nf90_inq_varid(ncid, 'nconvtop', ncvarid)
-            call handle_nf90_err(ncret)
-            ncret = nf90_get_var(ncid, ncvarid, nconvtop)
-            call handle_nf90_err(ncret)
-
-
-
-
-            PRINT *, 'SUM(pconv): ', SUM(pconv)
-            PRINT *, 'SUM(qconv): ', SUM(qconv)
-            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
-            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
-            PRINT *, 'tt2conv: ', tt2conv
-            PRINT *, 'nconvlev: ', nconvlev
-
-
-
-        ELSE
-            STOP 'fpio(): Illegal operation' 
-            
-        ENDIF
-    END SUBROUTINE fpio
-
-    SUBROUTINE fpmetbinary_filetext(filename, cm_index)
-
-        ! This is a utility subroutine meant to be used for testing purposes.
-        ! It facilitates the text output of variables read in from the 
-        ! specified .fp file.  This routine will easily cause the program
-        ! to crash due memory allocation issues, particularly when you are
-        ! trying to text print 3d arrays in a single formatted statetment.
-        
-        CHARACTER(LEN=*), INTENT(IN) :: filename
-        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
-                                                  ! most com_mod variables.
-                                                  ! Should be 1 or 2 
-
-        !OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', status='REPLACE', &
-        !    form="formatted", access="stream")
-        OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', &
-             form="formatted", access="APPEND")
-
-        WRITE(IOUNIT_TEXTOUT, *) 'oro: ', oro
-        WRITE(IOUNIT_TEXTOUT, *) 'excessoro: ', excessoro
-        WRITE(IOUNIT_TEXTOUT, *) 'lsm: ', lsm
-        WRITE(IOUNIT_TEXTOUT, *) 'xlanduse: ', xlanduse
-        WRITE(IOUNIT_TEXTOUT, *) 'height: ', height
-
-        WRITE(IOUNIT_TEXTOUT, *) 'uu: ', uu(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'vv: ', vv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'uupol: ', uupol(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'vvpol: ', vvpol(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'ww: ', ww(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'tt: ', tt(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'qv: ', qv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'pv: ', pv(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'rho: ', rho(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'drhodz: ', drhodz(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'tth: ', tth(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'qvh: ', qvh(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'pplev: ', pplev(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'clouds: ', clouds(:,:,:,cm_index)
-        WRITE(IOUNIT_TEXTOUT, *) 'cloudsh: ', cloudsh(:,:,cm_index)
-
-
-
-
-        CLOSE(IOUNIT_TEXTOUT)
-    END SUBROUTINE fpmetbinary_filetext
-
-    subroutine handle_nf90_err(status)
-
-        ! Custom routine for checking NF90 error status
-        ! and aborting if necessary
-        use netcdf
-        implicit none
-        integer, intent (in) :: status
-
-        if (status /= nf90_noerr) then
-            print *, trim(nf90_strerror(status))
-            stop "Stopped..."
-        endif
-    end subroutine handle_nf90_err
-
-
-    INTEGER FUNCTION logical2integer(logical_value)
-        IMPLICIT NONE
-
-        ! Auxiliary function to convert logical values to
-        ! integers.  THIS DOES NO TYPE CHECKING!!!
-
-
-        LOGICAL, INTENT(IN) :: logical_value
-
-        IF (logical_value .EQV. .TRUE.) THEN
-            logical2integer = 1
-        ELSE
-            logical2integer = 0
-        ENDIF
-
-        RETURN
-
-    END FUNCTION logical2integer
-
-
-    LOGICAL FUNCTION integer2logical(integer_value)
-        IMPLICIT NONE
-
-        ! Auxiliary function to convert integer values to
-        ! logical.  THIS DOES NO TYPE CHECKING!!!
-
-
-        INTEGER, INTENT(IN) :: integer_value
-
-        IF (integer_value .EQ. 0) THEN
-            integer2logical = .FALSE.
-        ELSE
-            integer2logical = .TRUE.
-        ENDIF
-
-        RETURN
-
-    END FUNCTION integer2logical
-
-
-END MODULE fpmetbinary_mod
diff --git a/flexpart_code/fpmetbinary_mod_fullload.F90 b/flexpart_code/fpmetbinary_mod_fullload.F90
deleted file mode 100644
index 21d057e2b373c0f7d2cc95967777f2ecbfa5db47..0000000000000000000000000000000000000000
--- a/flexpart_code/fpmetbinary_mod_fullload.F90
+++ /dev/null
@@ -1,177 +0,0 @@
-MODULE fpmetbinary_mod
-
-  !*****************************************************************************
-  !                                                                            *
-  !     Contains data and routines for dumping and loading processed met       *
-  !     fields.                                                                *
-  !     Authors Don Morton (Don.Morton@borealscicomp.com)                      *
-  !             Delia Arnold (deliona.arnold@gmail.com)                        *
-  !                                                                            *
-  !     15 Sep 2015                                                            *
-  !                                                                            *
-  !     Currently, the only data being dumped and loaded has data structures   *
-  !     defined in com_mod.f90.  In the future, perhaps it will be necessary   *
-  !     to use data structures from other parts of the FLEXPART code system.   *
-  !                                                                            *
-  !     Note that these routines need more robustness.  For example, what      *
-  !     what happens if the filename can't be read or written.  Or, what       *
-  !     happens if a read or write fails in any way.  Right now, it's crash    *
-  !     city.                                                                  *
-  !                                                                            *
-  !*****************************************************************************
-
-    USE com_mod
-
-    IMPLICIT NONE
-
-    ! Users may want to change these IO Unit values if they conflict with other parts
-    ! of code
-    INTEGER, PARAMETER :: IOUNIT_DUMP = 33, IOUNIT_LOAD = 34
-    PRIVATE IOUNIT_DUMP, IOUNIT_LOAD, fpio
-
-
-CONTAINS
-
-  !*****************************************************************************
-  !                                                                            *
-  !    Subroutines fpdump() and fpload() provide the public interface to       *
-  !    this module functionality.  I created the PRIVATE fpio() because I      *
-  !    wanted all interactions with variables to be in one place.  The read    *
-  !    and write operations need to be done in exactly the same sequence, so   *
-  !    I felt like keeping them in the same routine would at least allow for   *
-  !    coders to more easily compare the two sequences than if they were       *
-  !    separate.                                                               *
-  !                                                                            *
-  !*****************************************************************************
-
-
-    SUBROUTINE fpdump(filename)
-        CHARACTER(LEN=*), INTENT(IN) :: filename
-
-        OPEN(IOUNIT_DUMP, file=filename, action='WRITE', status='REPLACE', form="unformatted", access="stream")
-        CALL fpio(IOUNIT_DUMP, 'DUMP')
-        CLOSE(IOUNIT_DUMP)
-    END SUBROUTINE fpdump
-
-    SUBROUTINE fpload(filename)
-        CHARACTER(LEN=*), INTENT(IN) :: filename
-
-        OPEN(IOUNIT_LOAD, file=filename, action='READ', status='OLD', form="unformatted", access="stream")
-        CALL fpio(IOUNIT_LOAD, 'LOAD')
-        CLOSE(IOUNIT_LOAD)
-    END SUBROUTINE fpload
-
-
-
-
-
-    SUBROUTINE fpio(iounit, op)
-        IMPLICIT NONE
-        INTEGER, INTENT(IN) :: iounit
-        CHARACTER(LEN=4), INTENT(IN) :: op
-
-        if (op == 'DUMP') THEN
-#ifndef QUICKDUMP
-            WRITE(iounit) path, length
-            WRITE(iounit) ibdate, ibtime, iedate, ietime, bdate, edate
-            WRITE(iounit) ldirect, ideltas, loutstep, loutaver, loutsample, method, lsynctime, outstep
-            WRITE(iounit) ctl, fine, ifine, iout, ipin, iflux, mdomainfill
-            WRITE(iounit) mquasilag,nested_output,ind_source,ind_receptor
-            WRITE(iounit) ind_rel,ind_samp,ioutputforeachrelease,linit_cond, turbswitch
-            WRITE(iounit) mintime,itsplit, lsubgrid,lconvection,lagespectra
-            WRITE(iounit) nageclass, lage, gdomainfill
-            WRITE(iounit) compoint, numpoint, specnum
-            WRITE(iounit) decay, weta, wetb, reldiff, henry, f0
-            WRITE(iounit) density, dquer, dsigma, vsetaver, cunningham, weightmolar
-            WRITE(iounit) vset, schmi, fract, ri, rac, rcl ,rgs, rlu, rm, dryvel, kao, ohreact
-            WRITE(iounit) spec_ass, area_hour, point_hour, area_dow, point_dow
-            WRITE(iounit) nspec, maxpointspec_act, species
-            WRITE(iounit) nx_we, ny_sn, numcolumn, numcolumn_we, numcolumn_sn
-            WRITE(iounit) zcolumn_we, zcolumn_sn, xmassperparticle, acc_mass_we, acc_mass_sn
-            WRITE(iounit) numbwf, wftime, lwindinterv, wfname, wfspec
-            WRITE(iounit) memtime, memind
-            WRITE(iounit) nx,ny,nxmin1,nymin1,nxfield,nuvz,nwz,nz,nmixz,nlev_ec
-            WRITE(iounit) dx,dy,xlon0,ylat0,dxconst,dyconst,height
-            WRITE(iounit) akm, bkm, akz, bkz, aknew, bknew
-            WRITE(iounit) oro, excessoro, lsm, xlanduse
-            WRITE(iounit) uu, vv, uupol, vvpol, ww, tt, qv, pv, rho, drhodz, tth, qvh, pplev, clouds, cloudsh
-            WRITE(iounit) ps, sd, msl, tcc, u10, v10, tt2, td2, lsprec, convprec
-            WRITE(iounit) sshf, ssr, surfstr, ustar, wstar, hmix, tropopause, oli, diffk
-            WRITE(iounit) vdep, numbnests, wfnamen, wfspecn, nxn, nyn, dxn, dyn, xlon0n, ylat0n
-            WRITE(iounit) oron, excessoron, lsmn, xlandusen
-            WRITE(iounit) uun, vvn, wwn, ttn, qvn, pvn, cloudsn, cloudsnh, rhon, drhodzn, tthn, qvhn
-            WRITE(iounit) psn, sdn, msln, tccn, u10n, v10n, tt2n, td2n
-            WRITE(iounit) lsprecn, convprecn, sshfn, ssrn, surfstrn, ustarn, wstarn
-            WRITE(iounit) hmixn, tropopausen, olin, diffkn, vdepn
-            WRITE(iounit) xresoln, yresoln, xln, yln, xrn, yrn
-            WRITE(iounit) xglobal, sglobal, nglobal, switchnorthg, switchsouthg
-            WRITE(iounit) southpolemap, northpolemap
-            WRITE(iounit) landinvent, z0
-            WRITE(iounit) numxgrid, numygrid, numzgrid, dxout, dyout, outlon0, outlat0, xoutshiftn, youtshiftn
-            WRITE(iounit) DEP, DRYDEP, DRYDEPSPEC, WETDEP, OHREA, ASSSPEC
-            WRITE(iounit) xreceptor, yreceptor, receptorarea, creceptor, receptorname, numreceptor
-            WRITE(iounit) numpart, itra1, npoint, nclass, idt, itramem, itrasplit, numparticlecount
-            WRITE(iounit) xtra1, ytra1, ztra1, xmass1, rannumb
-#endif
-
-            ! This IO was actually done above, but it's put in here to help serve to test this
-            ! routine.  After all the writes and reads, it comes to this one, and a program that wants
-            ! to test all this can use this to insure that the values of uu, vv, ww read from the binary file
-            ! are the same as those that were written in
-            WRITE(iounit) uu, vv, ww
-
-
-        ELSE   ! We assume op is 'LOAD'
-#ifndef QUICKDUMP
-            READ(iounit) path, length
-            READ(iounit) ibdate, ibtime, iedate, ietime, bdate, edate
-            READ(iounit) ldirect, ideltas, loutstep, loutaver, loutsample, method, lsynctime, outstep
-            READ(iounit) ctl, fine, ifine, iout, ipin, iflux, mdomainfill
-            READ(iounit) mquasilag,nested_output,ind_source,ind_receptor
-            READ(iounit) ind_rel,ind_samp,ioutputforeachrelease,linit_cond, turbswitch
-            READ(iounit) mintime,itsplit, lsubgrid,lconvection,lagespectra
-            READ(iounit) nageclass, lage, gdomainfill
-            READ(iounit) compoint, numpoint, specnum
-            READ(iounit) decay, weta, wetb, reldiff, henry, f0
-            READ(iounit) density, dquer, dsigma, vsetaver, cunningham, weightmolar
-            READ(iounit) vset, schmi, fract, ri, rac, rcl ,rgs, rlu, rm, dryvel, kao, ohreact
-            READ(iounit) spec_ass, area_hour, point_hour, area_dow, point_dow
-            READ(iounit) nspec, maxpointspec_act, species
-            READ(iounit) nx_we, ny_sn, numcolumn, numcolumn_we, numcolumn_sn
-            READ(iounit) zcolumn_we, zcolumn_sn, xmassperparticle, acc_mass_we, acc_mass_sn
-            READ(iounit) numbwf, wftime, lwindinterv, wfname, wfspec
-            READ(iounit) memtime, memind
-            READ(iounit) nx,ny,nxmin1,nymin1,nxfield,nuvz,nwz,nz,nmixz,nlev_ec
-            READ(iounit) dx,dy,xlon0,ylat0,dxconst,dyconst,height
-            READ(iounit) akm, bkm, akz, bkz, aknew, bknew
-            READ(iounit) oro, excessoro, lsm, xlanduse
-            READ(iounit) uu, vv, uupol, vvpol, ww, tt, qv, pv, rho, drhodz, tth, qvh, pplev, clouds, cloudsh
-            READ(iounit) ps, sd, msl, tcc, u10, v10, tt2, td2, lsprec, convprec
-            READ(iounit) sshf, ssr, surfstr, ustar, wstar, hmix, tropopause, oli, diffk
-            READ(iounit) vdep, numbnests, wfnamen, wfspecn, nxn, nyn, dxn, dyn, xlon0n, ylat0n
-            READ(iounit) oron, excessoron, lsmn, xlandusen
-            READ(iounit) uun, vvn, wwn, ttn, qvn, pvn, cloudsn, cloudsnh, rhon, drhodzn, tthn, qvhn
-            READ(iounit) psn, sdn, msln, tccn, u10n, v10n, tt2n, td2n
-            READ(iounit) lsprecn, convprecn, sshfn, ssrn, surfstrn, ustarn, wstarn
-            READ(iounit) hmixn, tropopausen, olin, diffkn, vdepn
-            READ(iounit) xresoln, yresoln, xln, yln, xrn, yrn
-            READ(iounit) xglobal, sglobal, nglobal, switchnorthg, switchsouthg
-            READ(iounit) southpolemap, northpolemap
-            READ(iounit) landinvent, z0
-            READ(iounit) numxgrid, numygrid, numzgrid, dxout, dyout, outlon0, outlat0, xoutshiftn, youtshiftn
-            READ(iounit) DEP, DRYDEP, DRYDEPSPEC, WETDEP, OHREA, ASSSPEC
-            READ(iounit) xreceptor, yreceptor, receptorarea, creceptor, receptorname, numreceptor
-            READ(iounit) numpart, itra1, npoint, nclass, idt, itramem, itrasplit, numparticlecount
-            READ(iounit) xtra1, ytra1, ztra1, xmass1, rannumb
-#endif
-
-            ! This IO was actually done above, but it's put in here to help serve to test this
-            ! routine.  After all the writes and reads, it comes to this one, and a program that wants
-            ! to test all this can use this to insure that the values of uu, vv, ww read from the binary file
-            ! are the same as those that were written in
-            READ(iounit) uu, vv, ww
-        ENDIF
-    END SUBROUTINE fpio
-
-
-END MODULE fpmetbinary_mod
diff --git a/flexpart_code/par_mod.F90 b/flexpart_code/par_mod.F90
index 81d8218a186c520c9311dfca0ab91dac97665f75..7e7b36b26d55eae9e3d4ab09c4dc830c5fae70af 100644
--- a/flexpart_code/par_mod.F90
+++ b/flexpart_code/par_mod.F90
@@ -156,8 +156,8 @@ module par_mod
   ! Maximum dimensions of the nested input grids
   !*********************************************
 
-  integer,parameter :: maxnests=1, nxmaxn=180, nymaxn=100
-  !integer,parameter :: maxnests=0, nxmaxn=0, nymaxn=0
+  !integer,parameter :: maxnests=1, nxmaxn=180, nymaxn=100
+  integer,parameter :: maxnests=0, nxmaxn=0, nymaxn=0
   !integer,parameter :: maxnests=1,nxmaxn=251,nymaxn=151
 
   ! maxnests                maximum number of nested grids
diff --git a/flexpart_code/readwind_nests.F90 b/flexpart_code/readwind_nests.F90
index 90120ea7750da627a8c4c2bf70933229fc48b765..26c5bc3d98835b8c177d9f349bc815587f688a6c 100644
--- a/flexpart_code/readwind_nests.F90
+++ b/flexpart_code/readwind_nests.F90
@@ -274,7 +274,7 @@ subroutine readwind_nests(indj,n,uuhn,vvhn,wwhn)
     !!!!!!!!!!!!!!!!!!!  VTABLE code
     ! Get the fpname
     fpname = vtable_get_fpname(igrib, my_vtable)
-    print *, 'readwind_nests(): fpname: ', trim(fpname)
+    !print *, 'readwind_nests(): fpname: ', trim(fpname)
 
 
     !!!!!!!!!!!!!!!!!!!  VTABLE code