Changeset b398fb6 in flexpart.git


Ignore:
Timestamp:
Apr 16, 2017, 12:19:49 PM (7 years ago)
Author:
Don Morton <Don.Morton@…>
Branches:
fp9.3.1-20161214-nc4
Parents:
515b21c
Message:

Branch fp9.3.1-20161214-nc4 fpmetbinary_mod.F90 so that it
has separate routines for raw binary or NC4 I/O

Location:
flexpart_code
Files:
4 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • flexpart_code/fpmetbinary_mod.F90

    r515b21c rb398fb6  
    112112
    113113
    114 #ifdef RAWBIN
    115         OPEN(IOUNIT_DUMP, file=filename, action='WRITE', status='REPLACE', form="unformatted", access="stream")
    116 #endif
    117 
    118 
    119 
    120 
    121 
    122         CALL fpio(IOUNIT_DUMP, ncid, 'DUMP', cm_index)
    123 
    124 #ifdef RAWBIN
    125         CLOSE(IOUNIT_DUMP)
    126 #endif
     114
     115        CALL fpio(ncid, 'DUMP', cm_index)
    127116
    128117        PRINT *, 'Closing NC4 file...'
     
    153142
    154143
    155 
    156 #ifdef RAWBIN
    157         OPEN(IOUNIT_LOAD, file=filename, action='READ', status='OLD', form="unformatted", access="stream")
    158 #endif
    159 
    160         CALL fpio(IOUNIT_LOAD, ncid, 'LOAD', cm_index)
    161 
    162 #ifdef RAWBIN
    163         CLOSE(IOUNIT_LOAD)
    164 #endif
    165 
     144        CALL fpio(ncid, 'LOAD', cm_index)
    166145
    167146        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
     
    169148    END SUBROUTINE fpmetbinary_load
    170149
    171     SUBROUTINE fpmetbinary_zero(cm_index)
    172         INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
    173                                                   ! most com_mod variables.
    174                                                   ! Should be 1 or 2
    175 
    176 
    177         ! Zeroes out, in local datastructures, the values dumped/loaded
    178         ! This was written primarily as a testing mechanism.
    179         ! DJM -- 17 February 2017 -- I don't think this routine has been used
    180         ! for anything in recent past.  Might want to consider 86'ing it.
    181         ! The lines here correspond to READ and WRITE in the dump/load routines
    182 
    183         ! Scalar values
    184         nx=0.0; ny=0.0; nxmin1=0.0; nymin1=0.0; nxfield=0.0
    185         nuvz=0.0; nwz=0.0; nz=0.0; nmixz=0.0; nlev_ec=0.0
    186         dx=0.0; dy=0.0; xlon0=0.0; ylat0=0.0; dxconst=0.0; dyconst=0.0
    187 
    188         ! Fixed fields, static in time
    189         oro=0.0; excessoro=0.0; lsm=0.0; xlanduse=0.0; height=0.0
    190 
    191         ! 3d fields
    192         uu(:,:,:,cm_index) = 0.0
    193         vv(:,:,:,cm_index) = 0.0
    194         uupol(:,:,:,cm_index) = 0.0
    195         vvpol(:,:,:,cm_index) = 0.0
    196         ww(:,:,:,cm_index) = 0.0
    197         tt(:,:,:,cm_index) = 0.0
    198         qv(:,:,:,cm_index) = 0.0
    199         pv(:,:,:,cm_index) = 0.0
    200         rho(:,:,:,cm_index) = 0.0
    201         drhodz(:,:,:,cm_index) = 0.0
    202         tth(:,:,:,cm_index) = 0.0
    203         qvh(:,:,:,cm_index) = 0.0
    204         pplev(:,:,:,cm_index) = 0.0
    205         clouds(:,:,:,cm_index) = 0.0
    206         cloudsh(:,:,cm_index) = 0.0
    207 
    208         ! 2d fields
    209         ps(:,:,:,cm_index) = 0.0
    210         sd(:,:,:,cm_index) = 0.0
    211         msl(:,:,:,cm_index) = 0.0
    212         tcc(:,:,:,cm_index) = 0.0
    213         u10(:,:,:,cm_index) = 0.0
    214         v10(:,:,:,cm_index) = 0.0
    215         tt2(:,:,:,cm_index) = 0.0
    216         td2(:,:,:,cm_index) = 0.0
    217         lsprec(:,:,:,cm_index) = 0.0
    218         convprec(:,:,:,cm_index) = 0.0
    219         sshf(:,:,:,cm_index) = 0.0
    220         ssr(:,:,:,cm_index) = 0.0
    221         surfstr(:,:,:,cm_index) = 0.0
    222         ustar(:,:,:,cm_index) = 0.0
    223         wstar(:,:,:,cm_index) = 0.0
    224         hmix(:,:,:,cm_index) = 0.0
    225         tropopause(:,:,:,cm_index) = 0.0
    226         oli(:,:,:,cm_index) = 0.0
    227         diffk(:,:,:,cm_index) = 0.0
    228         vdep(:,:,:,cm_index) = 0.0
    229 
    230         ! 1d fields
    231         z0(:) = 0.0
    232         akm(:) = 0.0
    233         bkm(:) = 0.0
    234         akz(:) = 0.0
    235         bkz(:) = 0.0
    236         aknew(:) = 0.0
    237         bknew(:) = 0.0
    238 
    239         ! Nested, scalar values (for each nest)
    240         nxn(:) = 0.0
    241         nyn(:) = 0.0
    242         dxn(:) = 0.0
    243         dyn(:) = 0.0
    244         xlon0n(:) = 0.0
    245         ylat0n(:) = 0.0
    246 
    247         ! Nested fields, static in time
    248         oron=0.0; excessoron=0.0; lsmn=0.0; xlandusen=0.0
    249 
    250         ! 3d nested fields
    251         uun(:,:,:,cm_index,:) = 0.0
    252         wwn(:,:,:,cm_index,:) = 0.0
    253         ttn(:,:,:,cm_index,:) = 0.0
    254         qvn(:,:,:,cm_index,:) = 0.0
    255         pvn(:,:,:,cm_index,:) = 0.0
    256         cloudsn(:,:,:,cm_index,:) = 0.0
    257         cloudsnh(:,:,cm_index,:) = 0.0
    258         rhon(:,:,:,cm_index,:) = 0.0
    259         drhodzn(:,:,:,cm_index,:) = 0.0
    260         tthn(:,:,:,cm_index,:) = 0.0
    261         qvhn(:,:,:,cm_index,:) = 0.0
    262 
    263         ! 2d nested fields
    264         psn(:,:,:,cm_index,:) = 0.0
    265         sdn(:,:,:,cm_index,:) = 0.0
    266         msln(:,:,:,cm_index,:) = 0.0
    267         tccn(:,:,:,cm_index,:) = 0.0
    268         u10n(:,:,:,cm_index,:) = 0.0
    269         v10n(:,:,:,cm_index,:) = 0.0
    270         tt2n(:,:,:,cm_index,:) = 0.0
    271         td2n(:,:,:,cm_index,:) = 0.0
    272         lsprecn(:,:,:,cm_index,:) = 0.0
    273         convprecn(:,:,:,cm_index,:) = 0.0
    274         sshfn(:,:,:,cm_index,:) = 0.0
    275         ssrn(:,:,:,cm_index,:) = 0.0
    276         surfstrn(:,:,:,cm_index,:) = 0.0
    277         ustarn(:,:,:,cm_index,:) = 0.0
    278         wstarn(:,:,:,cm_index,:) = 0.0
    279         hmixn(:,:,:,cm_index,:) = 0.0
    280         tropopausen(:,:,:,cm_index,:) = 0.0
    281         olin(:,:,:,cm_index,:) = 0.0
    282         diffkn(:,:,:,cm_index,:) = 0.0
    283         vdepn(:,:,:,cm_index,:) = 0.0
    284 
    285         ! Auxiliary variables for nests
    286         xresoln(:) = 0.0
    287         yresoln(:) = 0.0
    288         xln(:) = 0.0
    289         yln(:) = 0.0
    290         xrn(:) = 0.0
    291         yrn(:) = 0.0
    292 
    293         ! Variables for polar stereographic projection
    294         xglobal=.FALSE.; sglobal=.FALSE.; nglobal=.FALSE.
    295         switchnorthg=0.0; switchsouthg=0.0
    296         southpolemap(:) = 0.0
    297         northpolemap(:) = 0.0
    298 
    299         ! Variables declared in conv_mod (convection)
    300         pconv(:) = 0.0
    301         phconv(:) = 0.0
    302         dpr(:) = 0.0
    303         pconv_hpa(:) = 0.0
    304         phconv_hpa(:) = 0.0
    305         ft(:) = 0.0
    306         fq(:) = 0.0
    307         fmass(:,:) = 0.0
    308         sub(:) = 0.0
    309         fmassfrac(:,:) = 0.0
    310         cbaseflux(:,:) = 0.0
    311         cbasefluxn(:,:,:) = 0.0
    312         tconv(:) = 0.0
    313         qconv(:) = 0.0
    314         qsconv(:) = 0.0
    315         psconv=0.0; tt2conv=0.0; td2conv=0.0
    316         nconvlev=0.0; nconvtop=0.0
    317 
    318     END SUBROUTINE fpmetbinary_zero
    319 
    320     SUBROUTINE fpio(iounit, ncid, op, cm_index)
     150
     151
     152
     153    SUBROUTINE fpio(ncid, op, cm_index)
    321154        IMPLICIT NONE
    322155        INTEGER, INTENT(IN) :: ncid               ! NetCDF file id
    323         INTEGER, INTENT(IN) :: iounit
    324156        CHARACTER(LEN=4), INTENT(IN) :: op        ! Operation - DUMP or LOAD
    325157        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
     
    380212
    381213
    382 #ifdef RAWBIN
    383             WRITE (iounit) PREPROC_FORMAT_VERSION_STR
    384 
    385 #endif
     214
    386215
    387216            ! Write the compiled max dimensions from par_mod - these are
     
    389218            ! information to provide the structure of arrays
    390219
    391 #ifdef RAWBIN
    392             WRITE (iounit) nxmax, nymax, nzmax, nuvzmax, nwzmax
    393 #endif
    394220
    395221
     
    449275
    450276
    451 
    452 #ifdef RAWBIN
    453             WRITE(iounit) nx, ny, nxmin1, nymin1, nxfield
    454             WRITE(iounit) nuvz, nwz, nz, nmixz, nlev_ec
    455             WRITE(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
    456 #endif
    457 
    458277            ncret = nf90_def_var(ncid, 'nx', NF90_INT, ncvarid)
    459278            call handle_nf90_err(ncret)
     
    539358
    540359            ! Fixed fields, static in time
    541 
    542 
    543 #ifdef RAWBIN
    544             WRITE(iounit) oro, excessoro, lsm, xlanduse, height
    545 #endif
    546 
    547360            dim2dids = (/nxmax_dimid, nymax_dimid/)
    548361
     
    614427
    615428            ! 3d fields
    616 
    617 
    618 
    619 #ifdef RAWBIN
    620             WRITE(iounit) uu(:,:,:,cm_index)
    621             WRITE(iounit) vv(:,:,:,cm_index)
    622             WRITE(iounit) uupol(:,:,:,cm_index)
    623             WRITE(iounit) vvpol(:,:,:,cm_index)
    624             WRITE(iounit) ww(:,:,:,cm_index)
    625             WRITE(iounit) tt(:,:,:,cm_index)
    626             WRITE(iounit) qv(:,:,:,cm_index)
    627             WRITE(iounit) pv(:,:,:,cm_index)
    628             WRITE(iounit) rho(:,:,:,cm_index)
    629             WRITE(iounit) drhodz(:,:,:,cm_index)
    630             WRITE(iounit) tth(:,:,:,cm_index)
    631             WRITE(iounit) qvh(:,:,:,cm_index)
    632             WRITE(iounit) pplev(:,:,:,cm_index)
    633             WRITE(iounit) clouds(:,:,:,cm_index)
    634             WRITE(iounit) cloudsh(:,:,cm_index)
    635 #endif
    636 
    637 
    638429            dim3dids = (/nxmax_dimid, nymax_dimid, nzmax_dimid/)
    639430
     
    836627
    837628            ! 2d fields
    838 
    839 
    840 #ifdef RAWBIN
    841             WRITE(iounit) ps(:,:,:,cm_index)
    842             WRITE(iounit) sd(:,:,:,cm_index)
    843             WRITE(iounit) msl(:,:,:,cm_index)
    844             WRITE(iounit) tcc(:,:,:,cm_index)
    845             WRITE(iounit) u10(:,:,:,cm_index)
    846             WRITE(iounit) v10(:,:,:,cm_index)
    847             WRITE(iounit) tt2(:,:,:,cm_index)
    848             WRITE(iounit) td2(:,:,:,cm_index)
    849             WRITE(iounit) lsprec(:,:,:,cm_index)
    850             WRITE(iounit) convprec(:,:,:,cm_index)
    851             WRITE(iounit) sshf(:,:,:,cm_index)
    852             WRITE(iounit) ssr(:,:,:,cm_index)
    853             WRITE(iounit) surfstr(:,:,:,cm_index)
    854             WRITE(iounit) ustar(:,:,:,cm_index)
    855             WRITE(iounit) wstar(:,:,:,cm_index)
    856             WRITE(iounit) hmix(:,:,:,cm_index)
    857             WRITE(iounit) tropopause(:,:,:,cm_index)
    858             WRITE(iounit) oli(:,:,:,cm_index)
    859             WRITE(iounit) diffk(:,:,:,cm_index)
    860             WRITE(iounit) vdep(:,:,:,cm_index)
    861 #endif
    862 
    863 
    864629            dim2dids = (/nxmax_dimid, nymax_dimid/)
    865630
     
    1118883
    1119884            ! 1d fields
    1120 
    1121 
    1122 
    1123 #ifdef RAWBIN
    1124             WRITE(iounit) z0(:)
    1125             WRITE(iounit) akm(:)
    1126             WRITE(iounit) bkm(:)
    1127             WRITE(iounit) akz(:)
    1128             WRITE(iounit) bkz(:)
    1129             WRITE(iounit) aknew(:)
    1130             WRITE(iounit) bknew(:)
    1131 #endif
    1132 
    1133885            dim1dids = (/numclass_dimid/)
    1134886
     
    1242994
    1243995
    1244 #ifdef RAWBIN
    1245             WRITE(iounit) nxn(:)
    1246             WRITE(iounit) nyn(:)
    1247             WRITE(iounit) dxn(:)
    1248             WRITE(iounit) dyn(:)
    1249             WRITE(iounit) xlon0n(:)
    1250             WRITE(iounit) ylat0n(:)
    1251 #endif
    1252 
    1253996            ! Nested, scalar values (for each nest)
    1254 
    1255997            dim1dids = (/maxnests_dimid/)
    1256998
     
    13311073
    13321074            ! Nested fields, static over time
    1333             WRITE(iounit) oron, excessoron, lsmn, xlandusen
    1334 
    13351075            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
    13361076
     
    13901130
    13911131            ! 3d nested fields
    1392 
    1393 
    1394 
    1395 #ifdef RAWBIN
    1396             WRITE(iounit) uun(:,:,:,cm_index,:)
    1397             WRITE(iounit) vvn(:,:,:,cm_index,:)
    1398             WRITE(iounit) wwn(:,:,:,cm_index,:)
    1399             WRITE(iounit) ttn(:,:,:,cm_index,:)
    1400             WRITE(iounit) qvn(:,:,:,cm_index,:)
    1401             WRITE(iounit) pvn(:,:,:,cm_index,:)
    1402             WRITE(iounit) cloudsn(:,:,:,cm_index,:)
    1403             WRITE(iounit) cloudsnh(:,:,cm_index,:)
    1404             WRITE(iounit) rhon(:,:,:,cm_index,:)
    1405             WRITE(iounit) drhodzn(:,:,:,cm_index,:)
    1406             WRITE(iounit) tthn(:,:,:,cm_index,:)
    1407             WRITE(iounit) qvhn(:,:,:,cm_index,:)
    1408 #endif
    1409 
    14101132            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nzmax_dimid, maxnests_dimid/)
    14111133
     
    15631285&                                cloudsnh(0:nxmaxn-1, 0:nymaxn-1, cm_index, 1:maxnests))
    15641286            call handle_nf90_err(ncret)
    1565 
    1566 
    1567 
    1568 
    1569 
    1570 
    1571 
    15721287
    15731288
     
    15791294
    15801295            ! 2d nested fields
    1581 
    1582 
    1583 #ifdef RAWBIN
    1584             WRITE(iounit) psn(:,:,:,cm_index,:)
    1585             WRITE(iounit) sdn(:,:,:,cm_index,:)
    1586             WRITE(iounit) msln(:,:,:,cm_index,:)
    1587             WRITE(iounit) tccn(:,:,:,cm_index,:)
    1588             WRITE(iounit) u10n(:,:,:,cm_index,:)
    1589             WRITE(iounit) v10n(:,:,:,cm_index,:)
    1590             WRITE(iounit) tt2n(:,:,:,cm_index,:)
    1591             WRITE(iounit) td2n(:,:,:,cm_index,:)
    1592             WRITE(iounit) lsprecn(:,:,:,cm_index,:)
    1593             WRITE(iounit) convprecn(:,:,:,cm_index,:)
    1594             WRITE(iounit) sshfn(:,:,:,cm_index,:)
    1595             WRITE(iounit) ssrn(:,:,:,cm_index,:)
    1596             WRITE(iounit) surfstrn(:,:,:,cm_index,:)
    1597             WRITE(iounit) ustarn(:,:,:,cm_index,:)
    1598             WRITE(iounit) wstarn(:,:,:,cm_index,:)
    1599             WRITE(iounit) hmixn(:,:,:,cm_index,:)
    1600             WRITE(iounit) tropopausen(:,:,:,cm_index,:)
    1601             WRITE(iounit) olin(:,:,:,cm_index,:)
    1602             WRITE(iounit) diffkn(:,:,:,cm_index,:)
    1603             WRITE(iounit) vdepn(:,:,:,cm_index,:)
    1604 #endif
    1605 
    1606 
    16071296            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
    16081297
     
    18501539&                                vdepn(0:nxmaxn-1, 0:nymaxn-1, 1:maxspec, cm_index, 1:maxnests))
    18511540            call handle_nf90_err(ncret)
    1852 
    1853 
    18541541
    18551542
     
    18601547
    18611548
    1862 
    1863 
    18641549            ! Auxiliary variables for nests
    1865 
    1866 #ifdef RAWBIN
    1867             WRITE(iounit) xresoln(:)
    1868             WRITE(iounit) yresoln(:)
    1869             WRITE(iounit) xln(:)
    1870             WRITE(iounit) yln(:)
    1871             WRITE(iounit) xrn(:)
    1872             WRITE(iounit) yrn(:)
    1873 #endif
    1874 
    1875 
    18761550            dim1dids = (/zero_to_maxnests_dimid/)
    18771551
     
    19561630
    19571631            ! Variables for polar stereographic projection
    1958 
    1959 
    1960 
    1961 #ifdef RAWBIN
    1962             WRITE(iounit) xglobal, sglobal, nglobal
    1963             WRITE(iounit) switchnorthg, switchsouthg
    1964             WRITE(iounit) southpolemap(:)
    1965             WRITE(iounit) northpolemap(:)
    1966 #endif
    1967 
    1968 
    19691632            dim1dids = (/polemap_dimid/)
    19701633
     
    20251688
    20261689            ! Variables declared in conv_mod (convection)
    2027 
    2028 
    2029 #ifdef RAWBIN
    2030             WRITE(iounit) pconv(:)
    2031             WRITE(iounit) phconv(:)
    2032             WRITE(iounit) dpr(:)
    2033             WRITE(iounit) pconv_hpa(:)
    2034             WRITE(iounit) phconv_hpa(:)
    2035             WRITE(iounit) ft(:)
    2036             WRITE(iounit) fq(:)
    2037             WRITE(iounit) fmass(:,:)
    2038             WRITE(iounit) sub(:)
    2039             WRITE(iounit) fmassfrac(:,:)
    2040             WRITE(iounit) cbaseflux(:,:)
    2041             WRITE(iounit) cbasefluxn(:,:,:)
    2042             WRITE(iounit) tconv(:)
    2043             WRITE(iounit) qconv(:)
    2044             WRITE(iounit) qsconv(:)
    2045             WRITE(iounit) psconv, tt2conv, td2conv
    2046             WRITE(iounit) nconvlev, nconvtop
    2047 #endif
    2048 
    2049 
    20501690            dim1dids = (/nconvlevmax_dimid/)
    20511691
     
    22371877            ! Read the preprocessed format version string and insure it
    22381878            ! matches this version
    2239 
    2240 
    2241 
    2242 
    2243 
    2244 
    2245 
    2246 #ifdef RAWBIN
    2247             READ (iounit) temp_preproc_format_version_str
    2248 #endif
    2249 
    2250 
    22511879            ncret = nf90_inq_dimid(ncid, 'preproc_fmt_str_dim', preproc_fmt_str_dimid)
    22521880            call handle_nf90_err(ncret)           
     
    22851913            ! we abort.
    22861914
    2287 
    2288 
    2289 #ifdef RAWBIN
    2290             READ (iounit) temp_nxmax, temp_nymax, temp_nzmax, &
    2291 &                         temp_nuvzmax, temp_nwzmax
    2292 #endif
    2293 
    2294 
    2295 
    2296 
    2297 
    22981915            ! Get dimensions
    2299            
    2300            
    2301 
    2302 
    23031916            ncret = nf90_inq_dimid(ncid, 'nxmax', nxmax_dimid)
    23041917            call handle_nf90_err(ncret)           
     
    23811994
    23821995
    2383 #ifdef RAWBIN
     1996            ! Get the varid , then read into scalar variable
     1997            ncret = nf90_inq_varid(ncid, 'nx', ncvarid)
     1998            call handle_nf90_err(ncret)
     1999            ncret = nf90_get_var(ncid, ncvarid, nx)
     2000            call handle_nf90_err(ncret)
     2001
     2002            ncret = nf90_inq_varid(ncid, 'ny', ncvarid)
     2003            call handle_nf90_err(ncret)
     2004            ncret = nf90_get_var(ncid, ncvarid, ny)
     2005            call handle_nf90_err(ncret)
     2006
     2007            ncret = nf90_inq_varid(ncid, 'nxmin1', ncvarid)
     2008            call handle_nf90_err(ncret)
     2009            ncret = nf90_get_var(ncid, ncvarid, nxmin1)
     2010            call handle_nf90_err(ncret)
     2011
     2012            ncret = nf90_inq_varid(ncid, 'nymin1', ncvarid)
     2013            call handle_nf90_err(ncret)
     2014            ncret = nf90_get_var(ncid, ncvarid, nymin1)
     2015            call handle_nf90_err(ncret)
     2016
     2017            ncret = nf90_inq_varid(ncid, 'nxfield', ncvarid)
     2018            call handle_nf90_err(ncret)
     2019            ncret = nf90_get_var(ncid, ncvarid, nxfield)
     2020            call handle_nf90_err(ncret)
     2021
     2022            ncret = nf90_inq_varid(ncid, 'nuvz', ncvarid)
     2023            call handle_nf90_err(ncret)
     2024            ncret = nf90_get_var(ncid, ncvarid, nuvz)
     2025            call handle_nf90_err(ncret)
     2026
     2027            ncret = nf90_inq_varid(ncid, 'nwz', ncvarid)
     2028            call handle_nf90_err(ncret)
     2029            ncret = nf90_get_var(ncid, ncvarid, nwz)
     2030            call handle_nf90_err(ncret)
     2031
     2032            ncret = nf90_inq_varid(ncid, 'nz', ncvarid)
     2033            call handle_nf90_err(ncret)
     2034            ncret = nf90_get_var(ncid, ncvarid, nz)
     2035            call handle_nf90_err(ncret)
     2036
     2037            ncret = nf90_inq_varid(ncid, 'nmixz', ncvarid)
     2038            call handle_nf90_err(ncret)
     2039            ncret = nf90_get_var(ncid, ncvarid, nmixz)
     2040            call handle_nf90_err(ncret)
     2041
     2042            ncret = nf90_inq_varid(ncid, 'nlev_ec', ncvarid)
     2043            call handle_nf90_err(ncret)
     2044            ncret = nf90_get_var(ncid, ncvarid, nlev_ec)
     2045            call handle_nf90_err(ncret)
     2046
     2047            ncret = nf90_inq_varid(ncid, 'dx', ncvarid)
     2048            call handle_nf90_err(ncret)
     2049            ncret = nf90_get_var(ncid, ncvarid, dx)
     2050            call handle_nf90_err(ncret)
     2051
     2052            ncret = nf90_inq_varid(ncid, 'dy', ncvarid)
     2053            call handle_nf90_err(ncret)
     2054            ncret = nf90_get_var(ncid, ncvarid, dy)
     2055            call handle_nf90_err(ncret)
     2056
     2057            ncret = nf90_inq_varid(ncid, 'xlon0', ncvarid)
     2058            call handle_nf90_err(ncret)
     2059            ncret = nf90_get_var(ncid, ncvarid, xlon0)
     2060            call handle_nf90_err(ncret)
     2061
     2062            ncret = nf90_inq_varid(ncid, 'ylat0', ncvarid)
     2063            call handle_nf90_err(ncret)
     2064            ncret = nf90_get_var(ncid, ncvarid, ylat0)
     2065            call handle_nf90_err(ncret)
     2066
     2067            ncret = nf90_inq_varid(ncid, 'dxconst', ncvarid)
     2068            call handle_nf90_err(ncret)
     2069            ncret = nf90_get_var(ncid, ncvarid, dxconst)
     2070            call handle_nf90_err(ncret)
     2071
     2072            ncret = nf90_inq_varid(ncid, 'dyconst', ncvarid)
     2073            call handle_nf90_err(ncret)
     2074            ncret = nf90_get_var(ncid, ncvarid, dyconst)
     2075            call handle_nf90_err(ncret)
     2076
     2077
     2078
     2079
     2080
     2081
     2082            ! Fixed fields, static in time
     2083            ncret = nf90_inq_varid(ncid, 'oro', ncvarid)
     2084            call handle_nf90_err(ncret)
     2085            ncret = nf90_get_var(ncid, ncvarid, oro(0:nxmax-1,0:nymax-1))
     2086            call handle_nf90_err(ncret)
     2087
     2088            ncret = nf90_inq_varid(ncid, 'excessoro', ncvarid)
     2089            call handle_nf90_err(ncret)
     2090            ncret = nf90_get_var(ncid, ncvarid, excessoro(0:nxmax-1,0:nymax-1))
     2091            call handle_nf90_err(ncret)
     2092
     2093            ncret = nf90_inq_varid(ncid, 'lsm', ncvarid)
     2094            call handle_nf90_err(ncret)
     2095            ncret = nf90_get_var(ncid, ncvarid, lsm(0:nxmax-1,0:nymax-1))
     2096            call handle_nf90_err(ncret)
     2097
     2098            ncret = nf90_inq_varid(ncid, 'xlanduse', ncvarid)
     2099            call handle_nf90_err(ncret)
     2100            ncret = nf90_get_var(ncid, ncvarid, xlanduse(0:nxmax-1,0:nymax-1, 1:numclass))
     2101            call handle_nf90_err(ncret)
     2102
     2103            ncret = nf90_inq_varid(ncid, 'height', ncvarid)
     2104            call handle_nf90_err(ncret)
     2105            ncret = nf90_get_var(ncid, ncvarid, height(1:nzmax))
     2106            call handle_nf90_err(ncret)
     2107
     2108
     2109
     2110
     2111            ! 3d fields
     2112
     2113            ! Get the varid and read the variable into the array
     2114            ncret = nf90_inq_varid(ncid, 'uu', ncvarid)
     2115            call handle_nf90_err(ncret)
     2116            ncret = nf90_get_var(ncid, ncvarid, uu(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2117            call handle_nf90_err(ncret)
     2118
     2119            ncret = nf90_inq_varid(ncid, 'vv', ncvarid)
     2120            call handle_nf90_err(ncret)
     2121            ncret = nf90_get_var(ncid, ncvarid, vv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2122            call handle_nf90_err(ncret)
     2123
     2124            ncret = nf90_inq_varid(ncid, 'uupol', ncvarid)
     2125            call handle_nf90_err(ncret)
     2126            ncret = nf90_get_var(ncid, ncvarid, uupol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2127            call handle_nf90_err(ncret)
     2128
     2129            ncret = nf90_inq_varid(ncid, 'vvpol', ncvarid)
     2130            call handle_nf90_err(ncret)
     2131            ncret = nf90_get_var(ncid, ncvarid, vvpol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2132            call handle_nf90_err(ncret)
     2133
     2134            ncret = nf90_inq_varid(ncid, 'ww', ncvarid)
     2135            call handle_nf90_err(ncret)
     2136            ncret = nf90_get_var(ncid, ncvarid, ww(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2137            call handle_nf90_err(ncret)
     2138
     2139            ncret = nf90_inq_varid(ncid, 'tt', ncvarid)
     2140            call handle_nf90_err(ncret)
     2141            ncret = nf90_get_var(ncid, ncvarid, tt(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2142            call handle_nf90_err(ncret)
     2143
     2144            ncret = nf90_inq_varid(ncid, 'qv', ncvarid)
     2145            call handle_nf90_err(ncret)
     2146            ncret = nf90_get_var(ncid, ncvarid, qv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2147            call handle_nf90_err(ncret)
     2148
     2149            ncret = nf90_inq_varid(ncid, 'pv', ncvarid)
     2150            call handle_nf90_err(ncret)
     2151            ncret = nf90_get_var(ncid, ncvarid, pv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2152            call handle_nf90_err(ncret)
     2153
     2154            ncret = nf90_inq_varid(ncid, 'rho', ncvarid)
     2155            call handle_nf90_err(ncret)
     2156            ncret = nf90_get_var(ncid, ncvarid, rho(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2157            call handle_nf90_err(ncret)
     2158
     2159            ncret = nf90_inq_varid(ncid, 'drhodz', ncvarid)
     2160            call handle_nf90_err(ncret)
     2161            ncret = nf90_get_var(ncid, ncvarid, drhodz(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2162            call handle_nf90_err(ncret)
     2163
     2164            ncret = nf90_inq_varid(ncid, 'clouds', ncvarid)
     2165            call handle_nf90_err(ncret)
     2166            ncret = nf90_get_var(ncid, ncvarid, clouds(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2167            call handle_nf90_err(ncret)
     2168
     2169            ncret = nf90_inq_varid(ncid, 'tth', ncvarid)
     2170            call handle_nf90_err(ncret)
     2171            ncret = nf90_get_var(ncid, ncvarid, tth(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
     2172            call handle_nf90_err(ncret)
     2173
     2174            ncret = nf90_inq_varid(ncid, 'qvh', ncvarid)
     2175            call handle_nf90_err(ncret)
     2176            ncret = nf90_get_var(ncid, ncvarid, qvh(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
     2177            call handle_nf90_err(ncret)
     2178
     2179            ncret = nf90_inq_varid(ncid, 'pplev', ncvarid)
     2180            call handle_nf90_err(ncret)
     2181            ncret = nf90_get_var(ncid, ncvarid, pplev(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
     2182            call handle_nf90_err(ncret)
     2183
     2184            ncret = nf90_inq_varid(ncid, 'cloudsh', ncvarid)
     2185            call handle_nf90_err(ncret)
     2186            ncret = nf90_get_var(ncid, ncvarid, cloudsh(0:nxmax-1,0:nymax-1,cm_index))
     2187            call handle_nf90_err(ncret)
     2188
     2189
     2190
     2191
     2192            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     2193&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     2194
     2195
     2196            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     2197&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     2198
     2199
     2200
     2201            ! 2d fields
     2202
     2203            ! Get the varid and read the variable into the array
     2204            ncret = nf90_inq_varid(ncid, 'ps', ncvarid)
     2205            call handle_nf90_err(ncret)
     2206            ncret = nf90_get_var(ncid, ncvarid, ps(0:nxmax-1,0:nymax-1,1,cm_index))
     2207            call handle_nf90_err(ncret)
     2208
     2209            ncret = nf90_inq_varid(ncid, 'sd', ncvarid)
     2210            call handle_nf90_err(ncret)
     2211            ncret = nf90_get_var(ncid, ncvarid, sd(0:nxmax-1,0:nymax-1,1,cm_index))
     2212            call handle_nf90_err(ncret)
     2213
     2214            ncret = nf90_inq_varid(ncid, 'msl', ncvarid)
     2215            call handle_nf90_err(ncret)
     2216            ncret = nf90_get_var(ncid, ncvarid, msl(0:nxmax-1,0:nymax-1,1,cm_index))
     2217            call handle_nf90_err(ncret)
     2218
     2219            ncret = nf90_inq_varid(ncid, 'tcc', ncvarid)
     2220            call handle_nf90_err(ncret)
     2221            ncret = nf90_get_var(ncid, ncvarid, tcc(0:nxmax-1,0:nymax-1,1,cm_index))
     2222            call handle_nf90_err(ncret)
     2223
     2224            ncret = nf90_inq_varid(ncid, 'u10', ncvarid)
     2225            call handle_nf90_err(ncret)
     2226            ncret = nf90_get_var(ncid, ncvarid, u10(0:nxmax-1,0:nymax-1,1,cm_index))
     2227            call handle_nf90_err(ncret)
     2228
     2229            ncret = nf90_inq_varid(ncid, 'v10', ncvarid)
     2230            call handle_nf90_err(ncret)
     2231            ncret = nf90_get_var(ncid, ncvarid, v10(0:nxmax-1,0:nymax-1,1,cm_index))
     2232            call handle_nf90_err(ncret)
     2233
     2234            ncret = nf90_inq_varid(ncid, 'tt2', ncvarid)
     2235            call handle_nf90_err(ncret)
     2236            ncret = nf90_get_var(ncid, ncvarid, tt2(0:nxmax-1,0:nymax-1,1,cm_index))
     2237            call handle_nf90_err(ncret)
     2238
     2239            ncret = nf90_inq_varid(ncid, 'td2', ncvarid)
     2240            call handle_nf90_err(ncret)
     2241            ncret = nf90_get_var(ncid, ncvarid, td2(0:nxmax-1,0:nymax-1,1,cm_index))
     2242            call handle_nf90_err(ncret)
     2243
     2244            ncret = nf90_inq_varid(ncid, 'lsprec', ncvarid)
     2245            call handle_nf90_err(ncret)
     2246            ncret = nf90_get_var(ncid, ncvarid, lsprec(0:nxmax-1,0:nymax-1,1,cm_index))
     2247            call handle_nf90_err(ncret)
     2248
     2249            ncret = nf90_inq_varid(ncid, 'convprec', ncvarid)
     2250            call handle_nf90_err(ncret)
     2251            ncret = nf90_get_var(ncid, ncvarid, convprec(0:nxmax-1,0:nymax-1,1,cm_index))
     2252            call handle_nf90_err(ncret)
     2253
     2254            ncret = nf90_inq_varid(ncid, 'sshf', ncvarid)
     2255            call handle_nf90_err(ncret)
     2256            ncret = nf90_get_var(ncid, ncvarid, sshf(0:nxmax-1,0:nymax-1,1,cm_index))
     2257            call handle_nf90_err(ncret)
     2258
     2259            ncret = nf90_inq_varid(ncid, 'ssr', ncvarid)
     2260            call handle_nf90_err(ncret)
     2261            ncret = nf90_get_var(ncid, ncvarid, ssr(0:nxmax-1,0:nymax-1,1,cm_index))
     2262            call handle_nf90_err(ncret)
     2263
     2264            ncret = nf90_inq_varid(ncid, 'surfstr', ncvarid)
     2265            call handle_nf90_err(ncret)
     2266            ncret = nf90_get_var(ncid, ncvarid, surfstr(0:nxmax-1,0:nymax-1,1,cm_index))
     2267            call handle_nf90_err(ncret)
     2268
     2269            ncret = nf90_inq_varid(ncid, 'ustar', ncvarid)
     2270            call handle_nf90_err(ncret)
     2271            ncret = nf90_get_var(ncid, ncvarid, ustar(0:nxmax-1,0:nymax-1,1,cm_index))
     2272            call handle_nf90_err(ncret)
     2273
     2274            ncret = nf90_inq_varid(ncid, 'wstar', ncvarid)
     2275            call handle_nf90_err(ncret)
     2276            ncret = nf90_get_var(ncid, ncvarid, wstar(0:nxmax-1,0:nymax-1,1,cm_index))
     2277            call handle_nf90_err(ncret)
     2278
     2279            ncret = nf90_inq_varid(ncid, 'hmix', ncvarid)
     2280            call handle_nf90_err(ncret)
     2281            ncret = nf90_get_var(ncid, ncvarid, hmix(0:nxmax-1,0:nymax-1,1,cm_index))
     2282            call handle_nf90_err(ncret)
     2283
     2284            ncret = nf90_inq_varid(ncid, 'tropopause', ncvarid)
     2285            call handle_nf90_err(ncret)
     2286            ncret = nf90_get_var(ncid, ncvarid, tropopause(0:nxmax-1,0:nymax-1,1,cm_index))
     2287            call handle_nf90_err(ncret)
     2288
     2289            ncret = nf90_inq_varid(ncid, 'oli', ncvarid)
     2290            call handle_nf90_err(ncret)
     2291            ncret = nf90_get_var(ncid, ncvarid, oli(0:nxmax-1,0:nymax-1,1,cm_index))
     2292            call handle_nf90_err(ncret)
     2293
     2294            ncret = nf90_inq_varid(ncid, 'diffk', ncvarid)
     2295            call handle_nf90_err(ncret)
     2296            ncret = nf90_get_var(ncid, ncvarid, diffk(0:nxmax-1,0:nymax-1,1,cm_index))
     2297            call handle_nf90_err(ncret)
     2298
     2299
     2300
     2301
     2302            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
     2303&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
     2304
     2305            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
     2306&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
     2307
     2308
     2309            ncret = nf90_inq_varid(ncid, 'vdep', ncvarid)
     2310            call handle_nf90_err(ncret)
     2311            ncret = nf90_get_var(ncid, ncvarid, vdep(0:nxmax-1,0:nymax-1,1:maxspec, cm_index))
     2312            call handle_nf90_err(ncret)
     2313
     2314
     2315
     2316
     2317
     2318            ! 1d fields
     2319
     2320            ncret = nf90_inq_varid(ncid, 'z0', ncvarid)
     2321            call handle_nf90_err(ncret)
     2322            ncret = nf90_get_var(ncid, ncvarid, z0(1:numclass))
     2323            call handle_nf90_err(ncret)
     2324
     2325            ncret = nf90_inq_varid(ncid, 'akm', ncvarid)
     2326            call handle_nf90_err(ncret)
     2327            ncret = nf90_get_var(ncid, ncvarid, akm(1:nwzmax))
     2328            call handle_nf90_err(ncret)
     2329
     2330            ncret = nf90_inq_varid(ncid, 'bkm', ncvarid)
     2331            call handle_nf90_err(ncret)
     2332            ncret = nf90_get_var(ncid, ncvarid, bkm(1:nwzmax))
     2333            call handle_nf90_err(ncret)
     2334
     2335            ncret = nf90_inq_varid(ncid, 'akz', ncvarid)
     2336            call handle_nf90_err(ncret)
     2337            ncret = nf90_get_var(ncid, ncvarid, akz(1:nuvzmax))
     2338            call handle_nf90_err(ncret)
     2339
     2340            ncret = nf90_inq_varid(ncid, 'bkz', ncvarid)
     2341            call handle_nf90_err(ncret)
     2342            ncret = nf90_get_var(ncid, ncvarid, bkz(1:nuvzmax))
     2343            call handle_nf90_err(ncret)
     2344
     2345            ncret = nf90_inq_varid(ncid, 'aknew', ncvarid)
     2346            call handle_nf90_err(ncret)
     2347            ncret = nf90_get_var(ncid, ncvarid, aknew(1:nzmax))
     2348            call handle_nf90_err(ncret)
     2349
     2350            ncret = nf90_inq_varid(ncid, 'bknew', ncvarid)
     2351            call handle_nf90_err(ncret)
     2352            ncret = nf90_get_var(ncid, ncvarid, bknew(1:nzmax))
     2353            call handle_nf90_err(ncret)
     2354
     2355
     2356
     2357            PRINT *, 'SUM(bknew(1:nzmax)): ', &
     2358&                                        SUM(bknew(1:nzmax))
     2359
     2360
     2361
     2362
     2363            ! Now the nested input grid variables
     2364            ! Get the compiled values that were written into the FP file, and
     2365            ! make sure they are equal to the current compiled values, to make
     2366            ! sure we are working with consistent arrays
     2367            ncret = nf90_inq_dimid(ncid, 'maxnests', maxnests_dimid)
     2368            call handle_nf90_err(ncret)
     2369            ncret = nf90_inquire_dimension(ncid, maxnests_dimid, maxnests_dimname, &
     2370&                                                temp_maxnests)
     2371            call handle_nf90_err(ncret)
     2372            PRINT *, 'temp_maxnests: ', temp_maxnests
     2373
     2374            ncret = nf90_inq_dimid(ncid, 'nxmaxn', nxmaxn_dimid)
     2375            call handle_nf90_err(ncret)
     2376            ncret = nf90_inquire_dimension(ncid, nxmaxn_dimid, nxmaxn_dimname, &
     2377&                                                temp_nxmaxn)
     2378            call handle_nf90_err(ncret)
     2379            PRINT *, 'temp_nxmaxn: ', temp_nxmaxn
     2380
     2381            ncret = nf90_inq_dimid(ncid, 'nymaxn', nymaxn_dimid)
     2382            call handle_nf90_err(ncret)
     2383            ncret = nf90_inquire_dimension(ncid, nymaxn_dimid, nymaxn_dimname, &
     2384&                                                temp_nymaxn)
     2385            call handle_nf90_err(ncret)
     2386            PRINT *, 'temp_nymaxn: ', temp_nymaxn
     2387
     2388            ! Note that maxspec_dimid and numclass_dimid were checked above
     2389
     2390
     2391
     2392
     2393            IF ( (temp_nxmaxn == nxmaxn) .AND. (temp_nymaxn == nymaxn) .AND. &
     2394&                   (temp_maxnests == maxnests) ) THEN
     2395                CONTINUE
     2396            ELSE
     2397                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
     2398                ! PRINT *, ''
     2399                PRINT *, '                  FP file     Compiled FP'
     2400                PRINT *, 'nxmaxn:     ', temp_nxmaxn, '    ', nxmaxn
     2401                PRINT *, 'nymaxn:     ', temp_nymaxn, '    ', nymaxn
     2402                PRINT *, 'maxnests:     ', temp_maxnests, '    ', maxnests
     2403                STOP
     2404            END IF
     2405
     2406
     2407
     2408            ! Nested, scalar values (for each nest)
     2409            ncret = nf90_inq_varid(ncid, 'nxn', ncvarid)
     2410            call handle_nf90_err(ncret)
     2411            ncret = nf90_get_var(ncid, ncvarid, nxn(1:maxnests))
     2412            call handle_nf90_err(ncret)
     2413
     2414            ncret = nf90_inq_varid(ncid, 'nyn', ncvarid)
     2415            call handle_nf90_err(ncret)
     2416            ncret = nf90_get_var(ncid, ncvarid, nyn(1:maxnests))
     2417            call handle_nf90_err(ncret)
     2418
     2419            ncret = nf90_inq_varid(ncid, 'dxn', ncvarid)
     2420            call handle_nf90_err(ncret)
     2421            ncret = nf90_get_var(ncid, ncvarid, dxn(1:maxnests))
     2422            call handle_nf90_err(ncret)
     2423
     2424            ncret = nf90_inq_varid(ncid, 'dyn', ncvarid)
     2425            call handle_nf90_err(ncret)
     2426            ncret = nf90_get_var(ncid, ncvarid, dyn(1:maxnests))
     2427            call handle_nf90_err(ncret)
     2428
     2429            ncret = nf90_inq_varid(ncid, 'xlon0n', ncvarid)
     2430            call handle_nf90_err(ncret)
     2431            ncret = nf90_get_var(ncid, ncvarid, xlon0n(1:maxnests))
     2432            call handle_nf90_err(ncret)
     2433
     2434            ncret = nf90_inq_varid(ncid, 'ylat0n', ncvarid)
     2435            call handle_nf90_err(ncret)
     2436            ncret = nf90_get_var(ncid, ncvarid, ylat0n(1:maxnests))
     2437            call handle_nf90_err(ncret)
     2438
     2439
     2440
     2441            ! Nested fields, static over time
     2442            ncret = nf90_inq_varid(ncid, 'oron', ncvarid)
     2443            call handle_nf90_err(ncret)
     2444            ncret = nf90_get_var(ncid, ncvarid, oron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
     2445            call handle_nf90_err(ncret)
     2446
     2447            ncret = nf90_inq_varid(ncid, 'excessoron', ncvarid)
     2448            call handle_nf90_err(ncret)
     2449            ncret = nf90_get_var(ncid, ncvarid, excessoron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
     2450            call handle_nf90_err(ncret)
     2451
     2452            ncret = nf90_inq_varid(ncid, 'lsmn', ncvarid)
     2453            call handle_nf90_err(ncret)
     2454            ncret = nf90_get_var(ncid, ncvarid, lsmn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
     2455            call handle_nf90_err(ncret)
     2456
     2457            ncret = nf90_inq_varid(ncid, 'xlandusen', ncvarid)
     2458            call handle_nf90_err(ncret)
     2459            ncret = nf90_get_var(ncid, ncvarid, xlandusen(0:nxmaxn-1,0:nymaxn-1,1:numclass,1:maxnests))
     2460            call handle_nf90_err(ncret)
     2461
     2462
     2463            PRINT *, 'SUM(oron): ', SUM(oron)
     2464
     2465
     2466
     2467
     2468            ! 3d nested fields
     2469
     2470            ncret = nf90_inq_varid(ncid, 'uun', ncvarid)
     2471            call handle_nf90_err(ncret)
     2472            ncret = nf90_get_var(ncid, ncvarid, uun(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2473            call handle_nf90_err(ncret)
     2474
     2475            ncret = nf90_inq_varid(ncid, 'vvn', ncvarid)
     2476            call handle_nf90_err(ncret)
     2477            ncret = nf90_get_var(ncid, ncvarid, vvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2478            call handle_nf90_err(ncret)
     2479
     2480            ncret = nf90_inq_varid(ncid, 'wwn', ncvarid)
     2481            call handle_nf90_err(ncret)
     2482            ncret = nf90_get_var(ncid, ncvarid, wwn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2483            call handle_nf90_err(ncret)
     2484
     2485            ncret = nf90_inq_varid(ncid, 'ttn', ncvarid)
     2486            call handle_nf90_err(ncret)
     2487            ncret = nf90_get_var(ncid, ncvarid, ttn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2488            call handle_nf90_err(ncret)
     2489
     2490            ncret = nf90_inq_varid(ncid, 'qvn', ncvarid)
     2491            call handle_nf90_err(ncret)
     2492            ncret = nf90_get_var(ncid, ncvarid, qvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2493            call handle_nf90_err(ncret)
     2494
     2495            ncret = nf90_inq_varid(ncid, 'pvn', ncvarid)
     2496            call handle_nf90_err(ncret)
     2497            ncret = nf90_get_var(ncid, ncvarid, pvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2498            call handle_nf90_err(ncret)
     2499
     2500            ncret = nf90_inq_varid(ncid, 'rhon', ncvarid)
     2501            call handle_nf90_err(ncret)
     2502            ncret = nf90_get_var(ncid, ncvarid, rhon(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2503            call handle_nf90_err(ncret)
     2504
     2505            ncret = nf90_inq_varid(ncid, 'drhodzn', ncvarid)
     2506            call handle_nf90_err(ncret)
     2507            ncret = nf90_get_var(ncid, ncvarid, drhodzn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2508            call handle_nf90_err(ncret)
     2509
     2510            ncret = nf90_inq_varid(ncid, 'tthn', ncvarid)
     2511            call handle_nf90_err(ncret)
     2512            ncret = nf90_get_var(ncid, ncvarid, tthn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
     2513            call handle_nf90_err(ncret)
     2514
     2515            ncret = nf90_inq_varid(ncid, 'qvhn', ncvarid)
     2516            call handle_nf90_err(ncret)
     2517            ncret = nf90_get_var(ncid, ncvarid, qvhn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
     2518            call handle_nf90_err(ncret)
     2519
     2520            ncret = nf90_inq_varid(ncid, 'cloudsn', ncvarid)
     2521            call handle_nf90_err(ncret)
     2522            ncret = nf90_get_var(ncid, ncvarid, cloudsn(0:nxmaxn-1,0:nymaxn-1,0:nzmax,cm_index,1:maxnests))
     2523            call handle_nf90_err(ncret)
     2524
     2525            ncret = nf90_inq_varid(ncid, 'cloudsnh', ncvarid)
     2526            call handle_nf90_err(ncret)
     2527            ncret = nf90_get_var(ncid, ncvarid, cloudsnh(0:nxmaxn-1,0:nymaxn-1,cm_index,1:maxnests))
     2528            call handle_nf90_err(ncret)
     2529
     2530
     2531
     2532
     2533            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
     2534            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
     2535            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
     2536
     2537
     2538
     2539
     2540            ! 2d nested fields
     2541            ncret = nf90_inq_varid(ncid, 'psn', ncvarid)
     2542            call handle_nf90_err(ncret)
     2543            ncret = nf90_get_var(ncid, ncvarid, psn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2544            call handle_nf90_err(ncret)
     2545
     2546            ncret = nf90_inq_varid(ncid, 'sdn', ncvarid)
     2547            call handle_nf90_err(ncret)
     2548            ncret = nf90_get_var(ncid, ncvarid, sdn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2549            call handle_nf90_err(ncret)
     2550
     2551            ncret = nf90_inq_varid(ncid, 'msln', ncvarid)
     2552            call handle_nf90_err(ncret)
     2553            ncret = nf90_get_var(ncid, ncvarid, msln(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2554            call handle_nf90_err(ncret)
     2555
     2556            ncret = nf90_inq_varid(ncid, 'tccn', ncvarid)
     2557            call handle_nf90_err(ncret)
     2558            ncret = nf90_get_var(ncid, ncvarid, tccn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2559            call handle_nf90_err(ncret)
     2560
     2561            ncret = nf90_inq_varid(ncid, 'u10n', ncvarid)
     2562            call handle_nf90_err(ncret)
     2563            ncret = nf90_get_var(ncid, ncvarid, u10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2564            call handle_nf90_err(ncret)
     2565
     2566            ncret = nf90_inq_varid(ncid, 'v10n', ncvarid)
     2567            call handle_nf90_err(ncret)
     2568            ncret = nf90_get_var(ncid, ncvarid, v10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2569            call handle_nf90_err(ncret)
     2570
     2571            ncret = nf90_inq_varid(ncid, 'tt2n', ncvarid)
     2572            call handle_nf90_err(ncret)
     2573            ncret = nf90_get_var(ncid, ncvarid, tt2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2574            call handle_nf90_err(ncret)
     2575
     2576            ncret = nf90_inq_varid(ncid, 'td2n', ncvarid)
     2577            call handle_nf90_err(ncret)
     2578            ncret = nf90_get_var(ncid, ncvarid, td2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2579            call handle_nf90_err(ncret)
     2580
     2581            ncret = nf90_inq_varid(ncid, 'lsprecn', ncvarid)
     2582            call handle_nf90_err(ncret)
     2583            ncret = nf90_get_var(ncid, ncvarid, lsprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2584            call handle_nf90_err(ncret)
     2585
     2586            ncret = nf90_inq_varid(ncid, 'convprecn', ncvarid)
     2587            call handle_nf90_err(ncret)
     2588            ncret = nf90_get_var(ncid, ncvarid, convprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2589            call handle_nf90_err(ncret)
     2590
     2591            ncret = nf90_inq_varid(ncid, 'sshfn', ncvarid)
     2592            call handle_nf90_err(ncret)
     2593            ncret = nf90_get_var(ncid, ncvarid, sshfn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2594            call handle_nf90_err(ncret)
     2595
     2596            ncret = nf90_inq_varid(ncid, 'ssrn', ncvarid)
     2597            call handle_nf90_err(ncret)
     2598            ncret = nf90_get_var(ncid, ncvarid, ssrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2599            call handle_nf90_err(ncret)
     2600
     2601            ncret = nf90_inq_varid(ncid, 'surfstrn', ncvarid)
     2602            call handle_nf90_err(ncret)
     2603            ncret = nf90_get_var(ncid, ncvarid, surfstrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2604            call handle_nf90_err(ncret)
     2605
     2606            ncret = nf90_inq_varid(ncid, 'ustarn', ncvarid)
     2607            call handle_nf90_err(ncret)
     2608            ncret = nf90_get_var(ncid, ncvarid, ustarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2609            call handle_nf90_err(ncret)
     2610
     2611            ncret = nf90_inq_varid(ncid, 'wstarn', ncvarid)
     2612            call handle_nf90_err(ncret)
     2613            ncret = nf90_get_var(ncid, ncvarid, wstarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2614            call handle_nf90_err(ncret)
     2615
     2616            ncret = nf90_inq_varid(ncid, 'hmixn', ncvarid)
     2617            call handle_nf90_err(ncret)
     2618            ncret = nf90_get_var(ncid, ncvarid, hmixn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2619            call handle_nf90_err(ncret)
     2620
     2621            ncret = nf90_inq_varid(ncid, 'tropopausen', ncvarid)
     2622            call handle_nf90_err(ncret)
     2623            ncret = nf90_get_var(ncid, ncvarid, tropopausen(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2624            call handle_nf90_err(ncret)
     2625
     2626            ncret = nf90_inq_varid(ncid, 'olin', ncvarid)
     2627            call handle_nf90_err(ncret)
     2628            ncret = nf90_get_var(ncid, ncvarid, olin(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2629            call handle_nf90_err(ncret)
     2630
     2631            ncret = nf90_inq_varid(ncid, 'diffkn', ncvarid)
     2632            call handle_nf90_err(ncret)
     2633            ncret = nf90_get_var(ncid, ncvarid, diffkn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2634            call handle_nf90_err(ncret)
     2635
     2636            ncret = nf90_inq_varid(ncid, 'vdepn', ncvarid)
     2637            call handle_nf90_err(ncret)
     2638            ncret = nf90_get_var(ncid, ncvarid, vdepn(0:nxmaxn-1,0:nymaxn-1,1:maxspec,cm_index,1:maxnests))
     2639            call handle_nf90_err(ncret)
     2640
     2641
     2642
     2643
     2644            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
     2645            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
     2646            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
     2647
     2648
     2649
     2650            ! Auxiliary variables for nests
     2651            ncret = nf90_inq_varid(ncid, 'xresoln', ncvarid)
     2652            call handle_nf90_err(ncret)
     2653            ncret = nf90_get_var(ncid, ncvarid, xresoln(0:maxnests))
     2654            call handle_nf90_err(ncret)
     2655
     2656            ncret = nf90_inq_varid(ncid, 'yresoln', ncvarid)
     2657            call handle_nf90_err(ncret)
     2658            ncret = nf90_get_var(ncid, ncvarid, yresoln(0:maxnests))
     2659            call handle_nf90_err(ncret)
     2660
     2661            ncret = nf90_inq_varid(ncid, 'xln', ncvarid)
     2662            call handle_nf90_err(ncret)
     2663            ncret = nf90_get_var(ncid, ncvarid, xln(1:maxnests))
     2664            call handle_nf90_err(ncret)
     2665
     2666            ncret = nf90_inq_varid(ncid, 'yln', ncvarid)
     2667            call handle_nf90_err(ncret)
     2668            ncret = nf90_get_var(ncid, ncvarid, yln(1:maxnests))
     2669            call handle_nf90_err(ncret)
     2670
     2671            ncret = nf90_inq_varid(ncid, 'xrn', ncvarid)
     2672            call handle_nf90_err(ncret)
     2673            ncret = nf90_get_var(ncid, ncvarid, xrn(1:maxnests))
     2674            call handle_nf90_err(ncret)
     2675
     2676            ncret = nf90_inq_varid(ncid, 'yrn', ncvarid)
     2677            call handle_nf90_err(ncret)
     2678            ncret = nf90_get_var(ncid, ncvarid, yrn(1:maxnests))
     2679            call handle_nf90_err(ncret)
     2680
     2681
     2682
     2683            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
     2684            PRINT *, 'SUM(xrn): ', SUM(xrn)
     2685
     2686
     2687
     2688            ! Variables for polar stereographic projection
     2689            ncret = nf90_inq_varid(ncid, 'southpolemap', ncvarid)
     2690            call handle_nf90_err(ncret)
     2691            ncret = nf90_get_var(ncid, ncvarid, southpolemap(:))
     2692            call handle_nf90_err(ncret)
     2693
     2694            ncret = nf90_inq_varid(ncid, 'northpolemap', ncvarid)
     2695            call handle_nf90_err(ncret)
     2696            ncret = nf90_get_var(ncid, ncvarid, northpolemap(:))
     2697            call handle_nf90_err(ncret)
     2698
     2699            ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
     2700            ! to INTEGER for NetCDF storage
     2701            ncret = nf90_inq_varid(ncid, 'xglobal', ncvarid)
     2702            call handle_nf90_err(ncret)
     2703            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
     2704            call handle_nf90_err(ncret)
     2705            xglobal = integer2logical(temp_integer)
     2706
     2707            ncret = nf90_inq_varid(ncid, 'sglobal', ncvarid)
     2708            call handle_nf90_err(ncret)
     2709            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
     2710            call handle_nf90_err(ncret)
     2711            sglobal = integer2logical(temp_integer)
     2712
     2713            ncret = nf90_inq_varid(ncid, 'nglobal', ncvarid)
     2714            call handle_nf90_err(ncret)
     2715            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
     2716            call handle_nf90_err(ncret)
     2717            nglobal = integer2logical(temp_integer)
     2718
     2719            ncret = nf90_inq_varid(ncid, 'switchnorthg', ncvarid)
     2720            call handle_nf90_err(ncret)
     2721            ncret = nf90_get_var(ncid, ncvarid, switchnorthg)
     2722            call handle_nf90_err(ncret)
     2723
     2724            ncret = nf90_inq_varid(ncid, 'switchsouthg', ncvarid)
     2725            call handle_nf90_err(ncret)
     2726            ncret = nf90_get_var(ncid, ncvarid, switchsouthg)
     2727            call handle_nf90_err(ncret)
     2728
     2729
     2730            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
     2731            PRINT *, 'xglobal: ', xglobal
     2732            PRINT *, 'sglobal: ', sglobal
     2733            PRINT *, 'nglobal: ', nglobal
     2734            PRINT *, 'switchsouthg: ', switchsouthg
     2735
     2736
     2737
     2738
     2739            ! Variables declared in conv_mod (convection)
     2740            ncret = nf90_inq_varid(ncid, 'pconv', ncvarid)
     2741            call handle_nf90_err(ncret)
     2742            ncret = nf90_get_var(ncid, ncvarid, pconv(:))
     2743            call handle_nf90_err(ncret)
     2744
     2745            ncret = nf90_inq_varid(ncid, 'dpr', ncvarid)
     2746            call handle_nf90_err(ncret)
     2747            ncret = nf90_get_var(ncid, ncvarid, dpr(:))
     2748            call handle_nf90_err(ncret)
     2749
     2750            ncret = nf90_inq_varid(ncid, 'pconv_hpa', ncvarid)
     2751            call handle_nf90_err(ncret)
     2752            ncret = nf90_get_var(ncid, ncvarid, pconv_hpa(:))
     2753            call handle_nf90_err(ncret)
     2754
     2755            ncret = nf90_inq_varid(ncid, 'ft', ncvarid)
     2756            call handle_nf90_err(ncret)
     2757            ncret = nf90_get_var(ncid, ncvarid, ft(:))
     2758            call handle_nf90_err(ncret)
     2759
     2760            ncret = nf90_inq_varid(ncid, 'fq', ncvarid)
     2761            call handle_nf90_err(ncret)
     2762            ncret = nf90_get_var(ncid, ncvarid, fq(:))
     2763            call handle_nf90_err(ncret)
     2764
     2765            ncret = nf90_inq_varid(ncid, 'sub', ncvarid)
     2766            call handle_nf90_err(ncret)
     2767            ncret = nf90_get_var(ncid, ncvarid, sub(:))
     2768            call handle_nf90_err(ncret)
     2769
     2770            ncret = nf90_inq_varid(ncid, 'phconv', ncvarid)
     2771            call handle_nf90_err(ncret)
     2772            ncret = nf90_get_var(ncid, ncvarid, phconv(:))
     2773            call handle_nf90_err(ncret)
     2774
     2775            ncret = nf90_inq_varid(ncid, 'phconv_hpa', ncvarid)
     2776            call handle_nf90_err(ncret)
     2777            ncret = nf90_get_var(ncid, ncvarid, phconv_hpa(:))
     2778            call handle_nf90_err(ncret)
     2779
     2780            ncret = nf90_inq_varid(ncid, 'tconv', ncvarid)
     2781            call handle_nf90_err(ncret)
     2782            ncret = nf90_get_var(ncid, ncvarid, tconv(:))
     2783            call handle_nf90_err(ncret)
     2784
     2785            ncret = nf90_inq_varid(ncid, 'qconv', ncvarid)
     2786            call handle_nf90_err(ncret)
     2787            ncret = nf90_get_var(ncid, ncvarid, qconv(:))
     2788            call handle_nf90_err(ncret)
     2789
     2790            ncret = nf90_inq_varid(ncid, 'qsconv', ncvarid)
     2791            call handle_nf90_err(ncret)
     2792            ncret = nf90_get_var(ncid, ncvarid, qsconv(:))
     2793            call handle_nf90_err(ncret)
     2794
     2795            ncret = nf90_inq_varid(ncid, 'fmass', ncvarid)
     2796            call handle_nf90_err(ncret)
     2797            ncret = nf90_get_var(ncid, ncvarid, fmass(:,:))
     2798            call handle_nf90_err(ncret)
     2799
     2800            ncret = nf90_inq_varid(ncid, 'fmassfrac', ncvarid)
     2801            call handle_nf90_err(ncret)
     2802            ncret = nf90_get_var(ncid, ncvarid, fmassfrac(:,:))
     2803            call handle_nf90_err(ncret)
     2804
     2805            ncret = nf90_inq_varid(ncid, 'cbaseflux', ncvarid)
     2806            call handle_nf90_err(ncret)
     2807            ncret = nf90_get_var(ncid, ncvarid, cbaseflux(0:nxmax-1,0:nymax-1))
     2808            call handle_nf90_err(ncret)
     2809
     2810            ncret = nf90_inq_varid(ncid, 'cbasefluxn', ncvarid)
     2811            call handle_nf90_err(ncret)
     2812            ncret = nf90_get_var(ncid, ncvarid, cbasefluxn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
     2813            call handle_nf90_err(ncret)
     2814
     2815            ncret = nf90_inq_varid(ncid, 'psconv', ncvarid)
     2816            call handle_nf90_err(ncret)
     2817            ncret = nf90_get_var(ncid, ncvarid, psconv)
     2818            call handle_nf90_err(ncret)
     2819
     2820            ncret = nf90_inq_varid(ncid, 'tt2conv', ncvarid)
     2821            call handle_nf90_err(ncret)
     2822            ncret = nf90_get_var(ncid, ncvarid, tt2conv)
     2823            call handle_nf90_err(ncret)
     2824
     2825            ncret = nf90_inq_varid(ncid, 'td2conv', ncvarid)
     2826            call handle_nf90_err(ncret)
     2827            ncret = nf90_get_var(ncid, ncvarid, td2conv)
     2828            call handle_nf90_err(ncret)
     2829
     2830            ncret = nf90_inq_varid(ncid, 'nconvlev', ncvarid)
     2831            call handle_nf90_err(ncret)
     2832            ncret = nf90_get_var(ncid, ncvarid, nconvlev)
     2833            call handle_nf90_err(ncret)
     2834
     2835            ncret = nf90_inq_varid(ncid, 'nconvtop', ncvarid)
     2836            call handle_nf90_err(ncret)
     2837            ncret = nf90_get_var(ncid, ncvarid, nconvtop)
     2838            call handle_nf90_err(ncret)
     2839
     2840
     2841
     2842
     2843            PRINT *, 'SUM(pconv): ', SUM(pconv)
     2844            PRINT *, 'SUM(qconv): ', SUM(qconv)
     2845            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
     2846            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
     2847            PRINT *, 'tt2conv: ', tt2conv
     2848            PRINT *, 'nconvlev: ', nconvlev
     2849
     2850
     2851
     2852        ELSE
     2853            STOP 'fpio(): Illegal operation'
     2854           
     2855        ENDIF
     2856    END SUBROUTINE fpio
     2857
     2858
     2859
     2860
     2861
     2862    SUBROUTINE fpio_rawbin(iounit, op, cm_index)
     2863        IMPLICIT NONE
     2864        INTEGER, INTENT(IN) :: iounit
     2865        CHARACTER(LEN=4), INTENT(IN) :: op        ! Operation - DUMP or LOAD
     2866        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
     2867                                                  ! most com_mod variables.
     2868                                                  ! Should be 1 or 2
     2869
     2870
     2871        INTEGER :: temp_integer   ! temporary value
     2872
     2873
     2874        ! These are temporary variables, used in the LOAD option, for
     2875        ! comparing against the current values in FLEXPART of nxmax, nymax, ...
     2876        INTEGER :: temp_nxmax, temp_nymax, temp_nzmax, &
     2877&                  temp_nuvzmax, temp_nwzmax, &
     2878&                  temp_maxspec, temp_numclass,&
     2879&                  temp_maxnests, temp_nxmaxn, temp_nymaxn, temp_preproc_fmt_str_dim
     2880
     2881        CHARACTER(LEN=PREPROC_FMT_STR_DIM) :: temp_preproc_format_version_str
     2882
     2883        CHARACTER(LEN=128) :: errmesg
     2884
     2885        INTEGER, PARAMETER :: DEF_LEVEL = 3
     2886
     2887        if (op == 'DUMP') THEN
     2888
     2889
     2890            ! Write the preprocessing format version string
     2891            !  NEED TO FILL THIS IN FOR NC4
     2892
     2893
     2894
     2895            WRITE (iounit) PREPROC_FORMAT_VERSION_STR
     2896
     2897
     2898            ! Write the compiled max dimensions from par_mod - these are
     2899            ! not meant to be reassigned during a LOAD, but used as "header"
     2900            ! information to provide the structure of arrays
     2901
     2902
     2903            WRITE (iounit) nxmax, nymax, nzmax, nuvzmax, nwzmax
     2904
     2905
     2906
     2907
     2908            ! Scalar values
     2909
     2910            ! Fixed fields, static in time
     2911
     2912
     2913
     2914            WRITE(iounit) oro, excessoro, lsm, xlanduse, height
     2915
     2916
     2917 
     2918
     2919            ! 3d fields
     2920            WRITE(iounit) uu(:,:,:,cm_index)
     2921            WRITE(iounit) vv(:,:,:,cm_index)
     2922            WRITE(iounit) uupol(:,:,:,cm_index)
     2923            WRITE(iounit) vvpol(:,:,:,cm_index)
     2924            WRITE(iounit) ww(:,:,:,cm_index)
     2925            WRITE(iounit) tt(:,:,:,cm_index)
     2926            WRITE(iounit) qv(:,:,:,cm_index)
     2927            WRITE(iounit) pv(:,:,:,cm_index)
     2928            WRITE(iounit) rho(:,:,:,cm_index)
     2929            WRITE(iounit) drhodz(:,:,:,cm_index)
     2930            WRITE(iounit) tth(:,:,:,cm_index)
     2931            WRITE(iounit) qvh(:,:,:,cm_index)
     2932            WRITE(iounit) pplev(:,:,:,cm_index)
     2933            WRITE(iounit) clouds(:,:,:,cm_index)
     2934            WRITE(iounit) cloudsh(:,:,cm_index)
     2935
     2936
     2937
     2938!            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     2939!&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     2940
     2941!            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     2942!&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     2943
     2944
     2945
     2946            ! 2d fields
     2947            WRITE(iounit) ps(:,:,:,cm_index)
     2948            WRITE(iounit) sd(:,:,:,cm_index)
     2949            WRITE(iounit) msl(:,:,:,cm_index)
     2950            WRITE(iounit) tcc(:,:,:,cm_index)
     2951            WRITE(iounit) u10(:,:,:,cm_index)
     2952            WRITE(iounit) v10(:,:,:,cm_index)
     2953            WRITE(iounit) tt2(:,:,:,cm_index)
     2954            WRITE(iounit) td2(:,:,:,cm_index)
     2955            WRITE(iounit) lsprec(:,:,:,cm_index)
     2956            WRITE(iounit) convprec(:,:,:,cm_index)
     2957            WRITE(iounit) sshf(:,:,:,cm_index)
     2958            WRITE(iounit) ssr(:,:,:,cm_index)
     2959            WRITE(iounit) surfstr(:,:,:,cm_index)
     2960            WRITE(iounit) ustar(:,:,:,cm_index)
     2961            WRITE(iounit) wstar(:,:,:,cm_index)
     2962            WRITE(iounit) hmix(:,:,:,cm_index)
     2963            WRITE(iounit) tropopause(:,:,:,cm_index)
     2964            WRITE(iounit) oli(:,:,:,cm_index)
     2965            WRITE(iounit) diffk(:,:,:,cm_index)
     2966            WRITE(iounit) vdep(:,:,:,cm_index)
     2967
     2968
     2969
     2970
     2971            ! 1d fields
     2972            WRITE(iounit) z0(:)
     2973            WRITE(iounit) akm(:)
     2974            WRITE(iounit) bkm(:)
     2975            WRITE(iounit) akz(:)
     2976            WRITE(iounit) bkz(:)
     2977            WRITE(iounit) aknew(:)
     2978            WRITE(iounit) bknew(:)
     2979
     2980
     2981
     2982
     2983
     2984!            PRINT *, 'SUM(bknew(1:nzmax)): ', &
     2985!&                                        SUM(bknew(1:nzmax))
     2986
     2987
     2988
     2989            ! Getting ready to add in nested code
     2990
     2991            ! These are compiled max dimensions from par_mod - these are
     2992            ! not meant to be reassigned during a LOAD, but used as "header"
     2993            ! information to provide the structure of arrays
     2994            WRITE(iounit) nxn(:)
     2995            WRITE(iounit) nyn(:)
     2996            WRITE(iounit) dxn(:)
     2997            WRITE(iounit) dyn(:)
     2998            WRITE(iounit) xlon0n(:)
     2999            WRITE(iounit) ylat0n(:)
     3000
     3001            ! Nested, scalar values (for each nest)
     3002
     3003
     3004            ! Nested fields, static over time
     3005            WRITE(iounit) oron, excessoron, lsmn, xlandusen
     3006
     3007
     3008!           PRINT *, 'SUM(oron): ', SUM(oron)
     3009
     3010
     3011
     3012            ! 3d nested fields
     3013            WRITE(iounit) uun(:,:,:,cm_index,:)
     3014            WRITE(iounit) vvn(:,:,:,cm_index,:)
     3015            WRITE(iounit) wwn(:,:,:,cm_index,:)
     3016            WRITE(iounit) ttn(:,:,:,cm_index,:)
     3017            WRITE(iounit) qvn(:,:,:,cm_index,:)
     3018            WRITE(iounit) pvn(:,:,:,cm_index,:)
     3019            WRITE(iounit) cloudsn(:,:,:,cm_index,:)
     3020            WRITE(iounit) cloudsnh(:,:,cm_index,:)
     3021            WRITE(iounit) rhon(:,:,:,cm_index,:)
     3022            WRITE(iounit) drhodzn(:,:,:,cm_index,:)
     3023            WRITE(iounit) tthn(:,:,:,cm_index,:)
     3024            WRITE(iounit) qvhn(:,:,:,cm_index,:)
     3025
     3026
     3027
     3028!            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
     3029!            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
     3030!            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
     3031
     3032
     3033
     3034            ! 2d nested fields
     3035            WRITE(iounit) psn(:,:,:,cm_index,:)
     3036            WRITE(iounit) sdn(:,:,:,cm_index,:)
     3037            WRITE(iounit) msln(:,:,:,cm_index,:)
     3038            WRITE(iounit) tccn(:,:,:,cm_index,:)
     3039            WRITE(iounit) u10n(:,:,:,cm_index,:)
     3040            WRITE(iounit) v10n(:,:,:,cm_index,:)
     3041            WRITE(iounit) tt2n(:,:,:,cm_index,:)
     3042            WRITE(iounit) td2n(:,:,:,cm_index,:)
     3043            WRITE(iounit) lsprecn(:,:,:,cm_index,:)
     3044            WRITE(iounit) convprecn(:,:,:,cm_index,:)
     3045            WRITE(iounit) sshfn(:,:,:,cm_index,:)
     3046            WRITE(iounit) ssrn(:,:,:,cm_index,:)
     3047            WRITE(iounit) surfstrn(:,:,:,cm_index,:)
     3048            WRITE(iounit) ustarn(:,:,:,cm_index,:)
     3049            WRITE(iounit) wstarn(:,:,:,cm_index,:)
     3050            WRITE(iounit) hmixn(:,:,:,cm_index,:)
     3051            WRITE(iounit) tropopausen(:,:,:,cm_index,:)
     3052            WRITE(iounit) olin(:,:,:,cm_index,:)
     3053            WRITE(iounit) diffkn(:,:,:,cm_index,:)
     3054            WRITE(iounit) vdepn(:,:,:,cm_index,:)
     3055
     3056
     3057
     3058!            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
     3059!            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
     3060!            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
     3061
     3062
     3063
     3064
     3065
     3066            ! Auxiliary variables for nests
     3067            WRITE(iounit) xresoln(:)
     3068            WRITE(iounit) yresoln(:)
     3069            WRITE(iounit) xln(:)
     3070            WRITE(iounit) yln(:)
     3071            WRITE(iounit) xrn(:)
     3072            WRITE(iounit) yrn(:)
     3073
     3074
     3075
     3076!            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
     3077!            PRINT *, 'SUM(xrn): ', SUM(xrn)
     3078
     3079
     3080
     3081            ! Variables for polar stereographic projection
     3082            WRITE(iounit) xglobal, sglobal, nglobal
     3083            WRITE(iounit) switchnorthg, switchsouthg
     3084            WRITE(iounit) southpolemap(:)
     3085            WRITE(iounit) northpolemap(:)
     3086
     3087
     3088
     3089
     3090
     3091!            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
     3092!            PRINT *, 'xglobal: ', xglobal
     3093!            PRINT *, 'sglobal: ', sglobal
     3094!            PRINT *, 'nglobal: ', nglobal
     3095!            PRINT *, 'switchsouthg: ', switchsouthg
     3096
     3097            ! Variables declared in conv_mod (convection)
     3098            WRITE(iounit) pconv(:)
     3099            WRITE(iounit) phconv(:)
     3100            WRITE(iounit) dpr(:)
     3101            WRITE(iounit) pconv_hpa(:)
     3102            WRITE(iounit) phconv_hpa(:)
     3103            WRITE(iounit) ft(:)
     3104            WRITE(iounit) fq(:)
     3105            WRITE(iounit) fmass(:,:)
     3106            WRITE(iounit) sub(:)
     3107            WRITE(iounit) fmassfrac(:,:)
     3108            WRITE(iounit) cbaseflux(:,:)
     3109            WRITE(iounit) cbasefluxn(:,:,:)
     3110            WRITE(iounit) tconv(:)
     3111            WRITE(iounit) qconv(:)
     3112            WRITE(iounit) qsconv(:)
     3113            WRITE(iounit) psconv, tt2conv, td2conv
     3114            WRITE(iounit) nconvlev, nconvtop
     3115
     3116
     3117
     3118
     3119!            PRINT *, 'SUM(pconv): ', SUM(pconv)
     3120!            PRINT *, 'SUM(qconv): ', SUM(qconv)
     3121!            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
     3122!            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
     3123!            PRINT *, 'tt2conv: ', tt2conv
     3124!            PRINT *, 'nconvlev: ', nconvlev
     3125
     3126
     3127
     3128        ELSE IF (op == 'LOAD') THEN
     3129
     3130            ! Read the preprocessed format version string and insure it
     3131            ! matches this version
     3132            READ (iounit) temp_preproc_format_version_str
     3133
     3134            PRINT *, 'Reading preprocessed file format version: ', &
     3135&                    temp_preproc_format_version_str
     3136            IF (TRIM(temp_preproc_format_version_str) == &
     3137&                                        TRIM(PREPROC_FORMAT_VERSION_STR)) THEN
     3138                CONTINUE
     3139            ELSE
     3140                ! PRINT *, ''  GK: causes relocation truncated to fit: R_X86_64_32
     3141                PRINT *, 'Inconsistent preprocessing format version'
     3142                PRINT *, 'Expected Version: ', PREPROC_FORMAT_VERSION_STR
     3143                PRINT *, 'Detected Version: ', temp_preproc_format_version_str
     3144                ! PRINT *, ''
     3145                STOP
     3146            END IF
     3147
     3148
     3149            ! Read the compiled max dimensions that were dumped from par_mod
     3150            ! when creating the fp file, so that we can compare against
     3151            ! current FLEXPART dimensions - they need to be the same, or else
     3152            ! we abort.
     3153            READ (iounit) temp_nxmax, temp_nymax, temp_nzmax, &
     3154&                         temp_nuvzmax, temp_nwzmax
     3155
     3156
     3157
     3158
     3159
     3160            ! Get dimensions
     3161            IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. &
     3162&                   (temp_nzmax == nzmax) .AND. &
     3163&                   (temp_nuvzmax == nuvzmax) .AND. &
     3164&                   (temp_nwzmax == nwzmax) ) THEN
     3165                CONTINUE
     3166            ELSE
     3167                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
     3168                PRINT *, '                  FP file     Compiled FP'
     3169                PRINT *, 'nxmax:     ', temp_nxmax, '    ', nxmax
     3170                PRINT *, 'nymax:     ', temp_nymax, '    ', nymax
     3171                PRINT *, 'nzmax:     ', temp_nzmax, '    ', nzmax
     3172                PRINT *, 'nuvzmax:     ', temp_nuvzmax, '    ', nuvzmax
     3173                PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax
     3174                STOP
     3175            END IF
     3176
     3177
     3178
     3179
     3180            ! Scalar values
    23843181            READ(iounit) nx, ny, nxmin1, nymin1, nxfield
    23853182            READ(iounit) nuvz, nwz, nz, nmixz, nlev_ec
    23863183            READ(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
    2387 #endif
    2388 
    2389 
    2390 
    2391             ! Get the varid , then read into scalar variable
    2392             ncret = nf90_inq_varid(ncid, 'nx', ncvarid)
    2393             call handle_nf90_err(ncret)
    2394             ncret = nf90_get_var(ncid, ncvarid, nx)
    2395             call handle_nf90_err(ncret)
    2396 
    2397             ncret = nf90_inq_varid(ncid, 'ny', ncvarid)
    2398             call handle_nf90_err(ncret)
    2399             ncret = nf90_get_var(ncid, ncvarid, ny)
    2400             call handle_nf90_err(ncret)
    2401 
    2402             ncret = nf90_inq_varid(ncid, 'nxmin1', ncvarid)
    2403             call handle_nf90_err(ncret)
    2404             ncret = nf90_get_var(ncid, ncvarid, nxmin1)
    2405             call handle_nf90_err(ncret)
    2406 
    2407             ncret = nf90_inq_varid(ncid, 'nymin1', ncvarid)
    2408             call handle_nf90_err(ncret)
    2409             ncret = nf90_get_var(ncid, ncvarid, nymin1)
    2410             call handle_nf90_err(ncret)
    2411 
    2412             ncret = nf90_inq_varid(ncid, 'nxfield', ncvarid)
    2413             call handle_nf90_err(ncret)
    2414             ncret = nf90_get_var(ncid, ncvarid, nxfield)
    2415             call handle_nf90_err(ncret)
    2416 
    2417             ncret = nf90_inq_varid(ncid, 'nuvz', ncvarid)
    2418             call handle_nf90_err(ncret)
    2419             ncret = nf90_get_var(ncid, ncvarid, nuvz)
    2420             call handle_nf90_err(ncret)
    2421 
    2422             ncret = nf90_inq_varid(ncid, 'nwz', ncvarid)
    2423             call handle_nf90_err(ncret)
    2424             ncret = nf90_get_var(ncid, ncvarid, nwz)
    2425             call handle_nf90_err(ncret)
    2426 
    2427             ncret = nf90_inq_varid(ncid, 'nz', ncvarid)
    2428             call handle_nf90_err(ncret)
    2429             ncret = nf90_get_var(ncid, ncvarid, nz)
    2430             call handle_nf90_err(ncret)
    2431 
    2432             ncret = nf90_inq_varid(ncid, 'nmixz', ncvarid)
    2433             call handle_nf90_err(ncret)
    2434             ncret = nf90_get_var(ncid, ncvarid, nmixz)
    2435             call handle_nf90_err(ncret)
    2436 
    2437             ncret = nf90_inq_varid(ncid, 'nlev_ec', ncvarid)
    2438             call handle_nf90_err(ncret)
    2439             ncret = nf90_get_var(ncid, ncvarid, nlev_ec)
    2440             call handle_nf90_err(ncret)
    2441 
    2442             ncret = nf90_inq_varid(ncid, 'dx', ncvarid)
    2443             call handle_nf90_err(ncret)
    2444             ncret = nf90_get_var(ncid, ncvarid, dx)
    2445             call handle_nf90_err(ncret)
    2446 
    2447             ncret = nf90_inq_varid(ncid, 'dy', ncvarid)
    2448             call handle_nf90_err(ncret)
    2449             ncret = nf90_get_var(ncid, ncvarid, dy)
    2450             call handle_nf90_err(ncret)
    2451 
    2452             ncret = nf90_inq_varid(ncid, 'xlon0', ncvarid)
    2453             call handle_nf90_err(ncret)
    2454             ncret = nf90_get_var(ncid, ncvarid, xlon0)
    2455             call handle_nf90_err(ncret)
    2456 
    2457             ncret = nf90_inq_varid(ncid, 'ylat0', ncvarid)
    2458             call handle_nf90_err(ncret)
    2459             ncret = nf90_get_var(ncid, ncvarid, ylat0)
    2460             call handle_nf90_err(ncret)
    2461 
    2462             ncret = nf90_inq_varid(ncid, 'dxconst', ncvarid)
    2463             call handle_nf90_err(ncret)
    2464             ncret = nf90_get_var(ncid, ncvarid, dxconst)
    2465             call handle_nf90_err(ncret)
    2466 
    2467             ncret = nf90_inq_varid(ncid, 'dyconst', ncvarid)
    2468             call handle_nf90_err(ncret)
    2469             ncret = nf90_get_var(ncid, ncvarid, dyconst)
    2470             call handle_nf90_err(ncret)
    2471 
    2472 
    2473 
    2474 
    2475 
    2476 
    2477             ! Fixed fields, static in time
    2478            
    2479 #ifdef RAWBIN           
     3184
     3185
     3186
     3187
     3188
     3189            ! Fixed fields, static in time           
    24803190            READ(iounit) oro, excessoro, lsm, xlanduse, height
    2481 #endif
    2482 
    2483             ncret = nf90_inq_varid(ncid, 'oro', ncvarid)
    2484             call handle_nf90_err(ncret)
    2485             ncret = nf90_get_var(ncid, ncvarid, oro(0:nxmax-1,0:nymax-1))
    2486             call handle_nf90_err(ncret)
    2487 
    2488             ncret = nf90_inq_varid(ncid, 'excessoro', ncvarid)
    2489             call handle_nf90_err(ncret)
    2490             ncret = nf90_get_var(ncid, ncvarid, excessoro(0:nxmax-1,0:nymax-1))
    2491             call handle_nf90_err(ncret)
    2492 
    2493             ncret = nf90_inq_varid(ncid, 'lsm', ncvarid)
    2494             call handle_nf90_err(ncret)
    2495             ncret = nf90_get_var(ncid, ncvarid, lsm(0:nxmax-1,0:nymax-1))
    2496             call handle_nf90_err(ncret)
    2497 
    2498             ncret = nf90_inq_varid(ncid, 'xlanduse', ncvarid)
    2499             call handle_nf90_err(ncret)
    2500             ncret = nf90_get_var(ncid, ncvarid, xlanduse(0:nxmax-1,0:nymax-1, 1:numclass))
    2501             call handle_nf90_err(ncret)
    2502 
    2503             ncret = nf90_inq_varid(ncid, 'height', ncvarid)
    2504             call handle_nf90_err(ncret)
    2505             ncret = nf90_get_var(ncid, ncvarid, height(1:nzmax))
    2506             call handle_nf90_err(ncret)
    2507 
    25083191
    25093192
    25103193
    25113194            ! 3d fields
    2512 
    2513 
    2514 
    2515 #ifdef RAWBIN
    25163195            READ(iounit) uu(:,:,:,cm_index)
    25173196            READ(iounit) vv(:,:,:,cm_index)
     
    25293208            READ(iounit) clouds(:,:,:,cm_index)
    25303209            READ(iounit) cloudsh(:,:,cm_index)
    2531 #endif
    2532 
    2533 
    2534 
    2535             ! Get the varid and read the variable into the array
    2536             ncret = nf90_inq_varid(ncid, 'uu', ncvarid)
    2537             call handle_nf90_err(ncret)
    2538             ncret = nf90_get_var(ncid, ncvarid, uu(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
    2539             call handle_nf90_err(ncret)
    2540 
    2541             ncret = nf90_inq_varid(ncid, 'vv', ncvarid)
    2542             call handle_nf90_err(ncret)
    2543             ncret = nf90_get_var(ncid, ncvarid, vv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
    2544             call handle_nf90_err(ncret)
    2545 
    2546             ncret = nf90_inq_varid(ncid, 'uupol', ncvarid)
    2547             call handle_nf90_err(ncret)
    2548             ncret = nf90_get_var(ncid, ncvarid, uupol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
    2549             call handle_nf90_err(ncret)
    2550 
    2551             ncret = nf90_inq_varid(ncid, 'vvpol', ncvarid)
    2552             call handle_nf90_err(ncret)
    2553             ncret = nf90_get_var(ncid, ncvarid, vvpol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
    2554             call handle_nf90_err(ncret)
    2555 
    2556             ncret = nf90_inq_varid(ncid, 'ww', ncvarid)
    2557             call handle_nf90_err(ncret)
    2558             ncret = nf90_get_var(ncid, ncvarid, ww(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
    2559             call handle_nf90_err(ncret)
    2560 
    2561             ncret = nf90_inq_varid(ncid, 'tt', ncvarid)
    2562             call handle_nf90_err(ncret)
    2563             ncret = nf90_get_var(ncid, ncvarid, tt(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
    2564             call handle_nf90_err(ncret)
    2565 
    2566             ncret = nf90_inq_varid(ncid, 'qv', ncvarid)
    2567             call handle_nf90_err(ncret)
    2568             ncret = nf90_get_var(ncid, ncvarid, qv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
    2569             call handle_nf90_err(ncret)
    2570 
    2571             ncret = nf90_inq_varid(ncid, 'pv', ncvarid)
    2572             call handle_nf90_err(ncret)
    2573             ncret = nf90_get_var(ncid, ncvarid, pv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
    2574             call handle_nf90_err(ncret)
    2575 
    2576             ncret = nf90_inq_varid(ncid, 'rho', ncvarid)
    2577             call handle_nf90_err(ncret)
    2578             ncret = nf90_get_var(ncid, ncvarid, rho(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
    2579             call handle_nf90_err(ncret)
    2580 
    2581             ncret = nf90_inq_varid(ncid, 'drhodz', ncvarid)
    2582             call handle_nf90_err(ncret)
    2583             ncret = nf90_get_var(ncid, ncvarid, drhodz(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
    2584             call handle_nf90_err(ncret)
    2585 
    2586             ncret = nf90_inq_varid(ncid, 'clouds', ncvarid)
    2587             call handle_nf90_err(ncret)
    2588             ncret = nf90_get_var(ncid, ncvarid, clouds(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
    2589             call handle_nf90_err(ncret)
    2590 
    2591             ncret = nf90_inq_varid(ncid, 'tth', ncvarid)
    2592             call handle_nf90_err(ncret)
    2593             ncret = nf90_get_var(ncid, ncvarid, tth(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
    2594             call handle_nf90_err(ncret)
    2595 
    2596             ncret = nf90_inq_varid(ncid, 'qvh', ncvarid)
    2597             call handle_nf90_err(ncret)
    2598             ncret = nf90_get_var(ncid, ncvarid, qvh(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
    2599             call handle_nf90_err(ncret)
    2600 
    2601             ncret = nf90_inq_varid(ncid, 'pplev', ncvarid)
    2602             call handle_nf90_err(ncret)
    2603             ncret = nf90_get_var(ncid, ncvarid, pplev(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
    2604             call handle_nf90_err(ncret)
    2605 
    2606             ncret = nf90_inq_varid(ncid, 'cloudsh', ncvarid)
    2607             call handle_nf90_err(ncret)
    2608             ncret = nf90_get_var(ncid, ncvarid, cloudsh(0:nxmax-1,0:nymax-1,cm_index))
    2609             call handle_nf90_err(ncret)
    2610 
    2611 
    2612 
    2613 
    2614             PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
    2615 &                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
    2616 
    2617 
    2618             PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
    2619 &                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     3210
     3211
     3212!            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     3213!&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     3214
     3215
     3216!            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     3217!&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
    26203218
    26213219
    26223220
    26233221            ! 2d fields
    2624 
    2625 
    2626 #ifdef RAWBIN
    26273222            READ(iounit) ps(:,:,:,cm_index)
    26283223            READ(iounit) sd(:,:,:,cm_index)
     
    26453240            READ(iounit) diffk(:,:,:,cm_index)
    26463241            READ(iounit) vdep(:,:,:,cm_index)
    2647 #endif
    2648 
    2649 
    2650 
    2651             ! Get the varid and read the variable into the array
    2652             ncret = nf90_inq_varid(ncid, 'ps', ncvarid)
    2653             call handle_nf90_err(ncret)
    2654             ncret = nf90_get_var(ncid, ncvarid, ps(0:nxmax-1,0:nymax-1,1,cm_index))
    2655             call handle_nf90_err(ncret)
    2656 
    2657             ncret = nf90_inq_varid(ncid, 'sd', ncvarid)
    2658             call handle_nf90_err(ncret)
    2659             ncret = nf90_get_var(ncid, ncvarid, sd(0:nxmax-1,0:nymax-1,1,cm_index))
    2660             call handle_nf90_err(ncret)
    2661 
    2662             ncret = nf90_inq_varid(ncid, 'msl', ncvarid)
    2663             call handle_nf90_err(ncret)
    2664             ncret = nf90_get_var(ncid, ncvarid, msl(0:nxmax-1,0:nymax-1,1,cm_index))
    2665             call handle_nf90_err(ncret)
    2666 
    2667             ncret = nf90_inq_varid(ncid, 'tcc', ncvarid)
    2668             call handle_nf90_err(ncret)
    2669             ncret = nf90_get_var(ncid, ncvarid, tcc(0:nxmax-1,0:nymax-1,1,cm_index))
    2670             call handle_nf90_err(ncret)
    2671 
    2672             ncret = nf90_inq_varid(ncid, 'u10', ncvarid)
    2673             call handle_nf90_err(ncret)
    2674             ncret = nf90_get_var(ncid, ncvarid, u10(0:nxmax-1,0:nymax-1,1,cm_index))
    2675             call handle_nf90_err(ncret)
    2676 
    2677             ncret = nf90_inq_varid(ncid, 'v10', ncvarid)
    2678             call handle_nf90_err(ncret)
    2679             ncret = nf90_get_var(ncid, ncvarid, v10(0:nxmax-1,0:nymax-1,1,cm_index))
    2680             call handle_nf90_err(ncret)
    2681 
    2682             ncret = nf90_inq_varid(ncid, 'tt2', ncvarid)
    2683             call handle_nf90_err(ncret)
    2684             ncret = nf90_get_var(ncid, ncvarid, tt2(0:nxmax-1,0:nymax-1,1,cm_index))
    2685             call handle_nf90_err(ncret)
    2686 
    2687             ncret = nf90_inq_varid(ncid, 'td2', ncvarid)
    2688             call handle_nf90_err(ncret)
    2689             ncret = nf90_get_var(ncid, ncvarid, td2(0:nxmax-1,0:nymax-1,1,cm_index))
    2690             call handle_nf90_err(ncret)
    2691 
    2692             ncret = nf90_inq_varid(ncid, 'lsprec', ncvarid)
    2693             call handle_nf90_err(ncret)
    2694             ncret = nf90_get_var(ncid, ncvarid, lsprec(0:nxmax-1,0:nymax-1,1,cm_index))
    2695             call handle_nf90_err(ncret)
    2696 
    2697             ncret = nf90_inq_varid(ncid, 'convprec', ncvarid)
    2698             call handle_nf90_err(ncret)
    2699             ncret = nf90_get_var(ncid, ncvarid, convprec(0:nxmax-1,0:nymax-1,1,cm_index))
    2700             call handle_nf90_err(ncret)
    2701 
    2702             ncret = nf90_inq_varid(ncid, 'sshf', ncvarid)
    2703             call handle_nf90_err(ncret)
    2704             ncret = nf90_get_var(ncid, ncvarid, sshf(0:nxmax-1,0:nymax-1,1,cm_index))
    2705             call handle_nf90_err(ncret)
    2706 
    2707             ncret = nf90_inq_varid(ncid, 'ssr', ncvarid)
    2708             call handle_nf90_err(ncret)
    2709             ncret = nf90_get_var(ncid, ncvarid, ssr(0:nxmax-1,0:nymax-1,1,cm_index))
    2710             call handle_nf90_err(ncret)
    2711 
    2712             ncret = nf90_inq_varid(ncid, 'surfstr', ncvarid)
    2713             call handle_nf90_err(ncret)
    2714             ncret = nf90_get_var(ncid, ncvarid, surfstr(0:nxmax-1,0:nymax-1,1,cm_index))
    2715             call handle_nf90_err(ncret)
    2716 
    2717             ncret = nf90_inq_varid(ncid, 'ustar', ncvarid)
    2718             call handle_nf90_err(ncret)
    2719             ncret = nf90_get_var(ncid, ncvarid, ustar(0:nxmax-1,0:nymax-1,1,cm_index))
    2720             call handle_nf90_err(ncret)
    2721 
    2722             ncret = nf90_inq_varid(ncid, 'wstar', ncvarid)
    2723             call handle_nf90_err(ncret)
    2724             ncret = nf90_get_var(ncid, ncvarid, wstar(0:nxmax-1,0:nymax-1,1,cm_index))
    2725             call handle_nf90_err(ncret)
    2726 
    2727             ncret = nf90_inq_varid(ncid, 'hmix', ncvarid)
    2728             call handle_nf90_err(ncret)
    2729             ncret = nf90_get_var(ncid, ncvarid, hmix(0:nxmax-1,0:nymax-1,1,cm_index))
    2730             call handle_nf90_err(ncret)
    2731 
    2732             ncret = nf90_inq_varid(ncid, 'tropopause', ncvarid)
    2733             call handle_nf90_err(ncret)
    2734             ncret = nf90_get_var(ncid, ncvarid, tropopause(0:nxmax-1,0:nymax-1,1,cm_index))
    2735             call handle_nf90_err(ncret)
    2736 
    2737             ncret = nf90_inq_varid(ncid, 'oli', ncvarid)
    2738             call handle_nf90_err(ncret)
    2739             ncret = nf90_get_var(ncid, ncvarid, oli(0:nxmax-1,0:nymax-1,1,cm_index))
    2740             call handle_nf90_err(ncret)
    2741 
    2742             ncret = nf90_inq_varid(ncid, 'diffk', ncvarid)
    2743             call handle_nf90_err(ncret)
    2744             ncret = nf90_get_var(ncid, ncvarid, diffk(0:nxmax-1,0:nymax-1,1,cm_index))
    2745             call handle_nf90_err(ncret)
    2746 
    2747 
    2748 
    2749 
    2750             PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
    2751 &                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
    2752 
    2753             PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
    2754 &                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
    2755 
    2756 
    2757             ncret = nf90_inq_varid(ncid, 'vdep', ncvarid)
    2758             call handle_nf90_err(ncret)
    2759             ncret = nf90_get_var(ncid, ncvarid, vdep(0:nxmax-1,0:nymax-1,1:maxspec, cm_index))
    2760             call handle_nf90_err(ncret)
    2761 
     3242
     3243
     3244
     3245
     3246
     3247!            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
     3248!&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
     3249
     3250!            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
     3251!&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
    27623252
    27633253
     
    27653255
    27663256            ! 1d fields
    2767 
    2768 #ifdef RAWBIN
    27693257            READ(iounit) z0(:)
    27703258            READ(iounit) akm(:)
     
    27743262            READ(iounit) aknew(:)
    27753263            READ(iounit) bknew(:)
    2776 #endif
    2777 
    2778             ncret = nf90_inq_varid(ncid, 'z0', ncvarid)
    2779             call handle_nf90_err(ncret)
    2780             ncret = nf90_get_var(ncid, ncvarid, z0(1:numclass))
    2781             call handle_nf90_err(ncret)
    2782 
    2783             ncret = nf90_inq_varid(ncid, 'akm', ncvarid)
    2784             call handle_nf90_err(ncret)
    2785             ncret = nf90_get_var(ncid, ncvarid, akm(1:nwzmax))
    2786             call handle_nf90_err(ncret)
    2787 
    2788             ncret = nf90_inq_varid(ncid, 'bkm', ncvarid)
    2789             call handle_nf90_err(ncret)
    2790             ncret = nf90_get_var(ncid, ncvarid, bkm(1:nwzmax))
    2791             call handle_nf90_err(ncret)
    2792 
    2793             ncret = nf90_inq_varid(ncid, 'akz', ncvarid)
    2794             call handle_nf90_err(ncret)
    2795             ncret = nf90_get_var(ncid, ncvarid, akz(1:nuvzmax))
    2796             call handle_nf90_err(ncret)
    2797 
    2798             ncret = nf90_inq_varid(ncid, 'bkz', ncvarid)
    2799             call handle_nf90_err(ncret)
    2800             ncret = nf90_get_var(ncid, ncvarid, bkz(1:nuvzmax))
    2801             call handle_nf90_err(ncret)
    2802 
    2803             ncret = nf90_inq_varid(ncid, 'aknew', ncvarid)
    2804             call handle_nf90_err(ncret)
    2805             ncret = nf90_get_var(ncid, ncvarid, aknew(1:nzmax))
    2806             call handle_nf90_err(ncret)
    2807 
    2808             ncret = nf90_inq_varid(ncid, 'bknew', ncvarid)
    2809             call handle_nf90_err(ncret)
    2810             ncret = nf90_get_var(ncid, ncvarid, bknew(1:nzmax))
    2811             call handle_nf90_err(ncret)
    2812 
    2813 
    2814 
    2815             PRINT *, 'SUM(bknew(1:nzmax)): ', &
    2816 &                                        SUM(bknew(1:nzmax))
    2817 
    2818 
    2819 
    2820 
    2821             ! Now the nested input grid variables
    2822             ! Get the compiled values that were written into the FP file, and
    2823             ! make sure they are equal to the current compiled values, to make
    2824             ! sure we are working with consistent arrays
    2825             ncret = nf90_inq_dimid(ncid, 'maxnests', maxnests_dimid)
    2826             call handle_nf90_err(ncret)
    2827             ncret = nf90_inquire_dimension(ncid, maxnests_dimid, maxnests_dimname, &
    2828 &                                                temp_maxnests)
    2829             call handle_nf90_err(ncret)
    2830             PRINT *, 'temp_maxnests: ', temp_maxnests
    2831 
    2832             ncret = nf90_inq_dimid(ncid, 'nxmaxn', nxmaxn_dimid)
    2833             call handle_nf90_err(ncret)
    2834             ncret = nf90_inquire_dimension(ncid, nxmaxn_dimid, nxmaxn_dimname, &
    2835 &                                                temp_nxmaxn)
    2836             call handle_nf90_err(ncret)
    2837             PRINT *, 'temp_nxmaxn: ', temp_nxmaxn
    2838 
    2839             ncret = nf90_inq_dimid(ncid, 'nymaxn', nymaxn_dimid)
    2840             call handle_nf90_err(ncret)
    2841             ncret = nf90_inquire_dimension(ncid, nymaxn_dimid, nymaxn_dimname, &
    2842 &                                                temp_nymaxn)
    2843             call handle_nf90_err(ncret)
    2844             PRINT *, 'temp_nymaxn: ', temp_nymaxn
    2845 
    2846             ! Note that maxspec_dimid and numclass_dimid were checked above
    2847 
    2848 
    2849 
    2850 
    2851             IF ( (temp_nxmaxn == nxmaxn) .AND. (temp_nymaxn == nymaxn) .AND. &
    2852 &                   (temp_maxnests == maxnests) ) THEN
    2853                 CONTINUE
    2854             ELSE
    2855                 PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
    2856                 ! PRINT *, ''
    2857                 PRINT *, '                  FP file     Compiled FP'
    2858                 PRINT *, 'nxmaxn:     ', temp_nxmaxn, '    ', nxmaxn
    2859                 PRINT *, 'nymaxn:     ', temp_nymaxn, '    ', nymaxn
    2860                 PRINT *, 'maxnests:     ', temp_maxnests, '    ', maxnests
    2861                 STOP
    2862             END IF
     3264
     3265
     3266
     3267!            PRINT *, 'SUM(bknew(1:nzmax)): ', &
     3268!&                                        SUM(bknew(1:nzmax))
     3269
     3270
    28633271
    28643272
    28653273
    28663274            ! Nested, scalar values (for each nest)
    2867 
    2868 
    2869 
    2870 
    2871 #ifdef RAWBIN
    28723275            READ(iounit) nxn(:)
    28733276            READ(iounit) nyn(:)
     
    28763279            READ(iounit) xlon0n(:)
    28773280            READ(iounit) ylat0n(:)
    2878 #endif
    2879 
    2880 
    2881             ncret = nf90_inq_varid(ncid, 'nxn', ncvarid)
    2882             call handle_nf90_err(ncret)
    2883             ncret = nf90_get_var(ncid, ncvarid, nxn(1:maxnests))
    2884             call handle_nf90_err(ncret)
    2885 
    2886             ncret = nf90_inq_varid(ncid, 'nyn', ncvarid)
    2887             call handle_nf90_err(ncret)
    2888             ncret = nf90_get_var(ncid, ncvarid, nyn(1:maxnests))
    2889             call handle_nf90_err(ncret)
    2890 
    2891             ncret = nf90_inq_varid(ncid, 'dxn', ncvarid)
    2892             call handle_nf90_err(ncret)
    2893             ncret = nf90_get_var(ncid, ncvarid, dxn(1:maxnests))
    2894             call handle_nf90_err(ncret)
    2895 
    2896             ncret = nf90_inq_varid(ncid, 'dyn', ncvarid)
    2897             call handle_nf90_err(ncret)
    2898             ncret = nf90_get_var(ncid, ncvarid, dyn(1:maxnests))
    2899             call handle_nf90_err(ncret)
    2900 
    2901             ncret = nf90_inq_varid(ncid, 'xlon0n', ncvarid)
    2902             call handle_nf90_err(ncret)
    2903             ncret = nf90_get_var(ncid, ncvarid, xlon0n(1:maxnests))
    2904             call handle_nf90_err(ncret)
    2905 
    2906             ncret = nf90_inq_varid(ncid, 'ylat0n', ncvarid)
    2907             call handle_nf90_err(ncret)
    2908             ncret = nf90_get_var(ncid, ncvarid, ylat0n(1:maxnests))
    2909             call handle_nf90_err(ncret)
    29103281
    29113282
    29123283
    29133284            ! Nested fields, static over time
    2914 
    2915 #ifdef RAWBIN
    29163285            READ(iounit) oron, excessoron, lsmn, xlandusen
    2917 #endif
    2918 
    2919             ncret = nf90_inq_varid(ncid, 'oron', ncvarid)
    2920             call handle_nf90_err(ncret)
    2921             ncret = nf90_get_var(ncid, ncvarid, oron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
    2922             call handle_nf90_err(ncret)
    2923 
    2924             ncret = nf90_inq_varid(ncid, 'excessoron', ncvarid)
    2925             call handle_nf90_err(ncret)
    2926             ncret = nf90_get_var(ncid, ncvarid, excessoron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
    2927             call handle_nf90_err(ncret)
    2928 
    2929             ncret = nf90_inq_varid(ncid, 'lsmn', ncvarid)
    2930             call handle_nf90_err(ncret)
    2931             ncret = nf90_get_var(ncid, ncvarid, lsmn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
    2932             call handle_nf90_err(ncret)
    2933 
    2934             ncret = nf90_inq_varid(ncid, 'xlandusen', ncvarid)
    2935             call handle_nf90_err(ncret)
    2936             ncret = nf90_get_var(ncid, ncvarid, xlandusen(0:nxmaxn-1,0:nymaxn-1,1:numclass,1:maxnests))
    2937             call handle_nf90_err(ncret)
    2938 
    2939 
    2940             PRINT *, 'SUM(oron): ', SUM(oron)
     3286
     3287
     3288
     3289!            PRINT *, 'SUM(oron): ', SUM(oron)
    29413290
    29423291
     
    29443293
    29453294            ! 3d nested fields
    2946 
    2947 #ifdef RAWBIN
    29483295            READ(iounit) uun(:,:,:,cm_index,:)
    29493296            READ(iounit) vvn(:,:,:,cm_index,:)
     
    29583305            READ(iounit) tthn(:,:,:,cm_index,:)
    29593306            READ(iounit) qvhn(:,:,:,cm_index,:)
    2960 #endif
    2961 
    2962             ncret = nf90_inq_varid(ncid, 'uun', ncvarid)
    2963             call handle_nf90_err(ncret)
    2964             ncret = nf90_get_var(ncid, ncvarid, uun(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
    2965             call handle_nf90_err(ncret)
    2966 
    2967             ncret = nf90_inq_varid(ncid, 'vvn', ncvarid)
    2968             call handle_nf90_err(ncret)
    2969             ncret = nf90_get_var(ncid, ncvarid, vvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
    2970             call handle_nf90_err(ncret)
    2971 
    2972             ncret = nf90_inq_varid(ncid, 'wwn', ncvarid)
    2973             call handle_nf90_err(ncret)
    2974             ncret = nf90_get_var(ncid, ncvarid, wwn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
    2975             call handle_nf90_err(ncret)
    2976 
    2977             ncret = nf90_inq_varid(ncid, 'ttn', ncvarid)
    2978             call handle_nf90_err(ncret)
    2979             ncret = nf90_get_var(ncid, ncvarid, ttn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
    2980             call handle_nf90_err(ncret)
    2981 
    2982             ncret = nf90_inq_varid(ncid, 'qvn', ncvarid)
    2983             call handle_nf90_err(ncret)
    2984             ncret = nf90_get_var(ncid, ncvarid, qvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
    2985             call handle_nf90_err(ncret)
    2986 
    2987             ncret = nf90_inq_varid(ncid, 'pvn', ncvarid)
    2988             call handle_nf90_err(ncret)
    2989             ncret = nf90_get_var(ncid, ncvarid, pvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
    2990             call handle_nf90_err(ncret)
    2991 
    2992             ncret = nf90_inq_varid(ncid, 'rhon', ncvarid)
    2993             call handle_nf90_err(ncret)
    2994             ncret = nf90_get_var(ncid, ncvarid, rhon(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
    2995             call handle_nf90_err(ncret)
    2996 
    2997             ncret = nf90_inq_varid(ncid, 'drhodzn', ncvarid)
    2998             call handle_nf90_err(ncret)
    2999             ncret = nf90_get_var(ncid, ncvarid, drhodzn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
    3000             call handle_nf90_err(ncret)
    3001 
    3002             ncret = nf90_inq_varid(ncid, 'tthn', ncvarid)
    3003             call handle_nf90_err(ncret)
    3004             ncret = nf90_get_var(ncid, ncvarid, tthn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
    3005             call handle_nf90_err(ncret)
    3006 
    3007             ncret = nf90_inq_varid(ncid, 'qvhn', ncvarid)
    3008             call handle_nf90_err(ncret)
    3009             ncret = nf90_get_var(ncid, ncvarid, qvhn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
    3010             call handle_nf90_err(ncret)
    3011 
    3012             ncret = nf90_inq_varid(ncid, 'cloudsn', ncvarid)
    3013             call handle_nf90_err(ncret)
    3014             ncret = nf90_get_var(ncid, ncvarid, cloudsn(0:nxmaxn-1,0:nymaxn-1,0:nzmax,cm_index,1:maxnests))
    3015             call handle_nf90_err(ncret)
    3016 
    3017             ncret = nf90_inq_varid(ncid, 'cloudsnh', ncvarid)
    3018             call handle_nf90_err(ncret)
    3019             ncret = nf90_get_var(ncid, ncvarid, cloudsnh(0:nxmaxn-1,0:nymaxn-1,cm_index,1:maxnests))
    3020             call handle_nf90_err(ncret)
    3021 
    3022 
    3023 
    3024 
    3025             PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
    3026             PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
    3027             PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
     3307
     3308!            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
     3309!            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
     3310!            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
    30283311
    30293312
     
    30313314
    30323315            ! 2d nested fields
    3033 
    3034 
    3035 #ifdef RAWBIN
    30363316            READ(iounit) psn(:,:,:,cm_index,:)
    30373317            READ(iounit) sdn(:,:,:,cm_index,:)
     
    30543334            READ(iounit) diffkn(:,:,:,cm_index,:)
    30553335            READ(iounit) vdepn(:,:,:,cm_index,:)
    3056 #endif
    3057 
    3058 
    3059             ncret = nf90_inq_varid(ncid, 'psn', ncvarid)
    3060             call handle_nf90_err(ncret)
    3061             ncret = nf90_get_var(ncid, ncvarid, psn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3062             call handle_nf90_err(ncret)
    3063 
    3064             ncret = nf90_inq_varid(ncid, 'sdn', ncvarid)
    3065             call handle_nf90_err(ncret)
    3066             ncret = nf90_get_var(ncid, ncvarid, sdn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3067             call handle_nf90_err(ncret)
    3068 
    3069             ncret = nf90_inq_varid(ncid, 'msln', ncvarid)
    3070             call handle_nf90_err(ncret)
    3071             ncret = nf90_get_var(ncid, ncvarid, msln(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3072             call handle_nf90_err(ncret)
    3073 
    3074             ncret = nf90_inq_varid(ncid, 'tccn', ncvarid)
    3075             call handle_nf90_err(ncret)
    3076             ncret = nf90_get_var(ncid, ncvarid, tccn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3077             call handle_nf90_err(ncret)
    3078 
    3079             ncret = nf90_inq_varid(ncid, 'u10n', ncvarid)
    3080             call handle_nf90_err(ncret)
    3081             ncret = nf90_get_var(ncid, ncvarid, u10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3082             call handle_nf90_err(ncret)
    3083 
    3084             ncret = nf90_inq_varid(ncid, 'v10n', ncvarid)
    3085             call handle_nf90_err(ncret)
    3086             ncret = nf90_get_var(ncid, ncvarid, v10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3087             call handle_nf90_err(ncret)
    3088 
    3089             ncret = nf90_inq_varid(ncid, 'tt2n', ncvarid)
    3090             call handle_nf90_err(ncret)
    3091             ncret = nf90_get_var(ncid, ncvarid, tt2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3092             call handle_nf90_err(ncret)
    3093 
    3094             ncret = nf90_inq_varid(ncid, 'td2n', ncvarid)
    3095             call handle_nf90_err(ncret)
    3096             ncret = nf90_get_var(ncid, ncvarid, td2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3097             call handle_nf90_err(ncret)
    3098 
    3099             ncret = nf90_inq_varid(ncid, 'lsprecn', ncvarid)
    3100             call handle_nf90_err(ncret)
    3101             ncret = nf90_get_var(ncid, ncvarid, lsprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3102             call handle_nf90_err(ncret)
    3103 
    3104             ncret = nf90_inq_varid(ncid, 'convprecn', ncvarid)
    3105             call handle_nf90_err(ncret)
    3106             ncret = nf90_get_var(ncid, ncvarid, convprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3107             call handle_nf90_err(ncret)
    3108 
    3109             ncret = nf90_inq_varid(ncid, 'sshfn', ncvarid)
    3110             call handle_nf90_err(ncret)
    3111             ncret = nf90_get_var(ncid, ncvarid, sshfn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3112             call handle_nf90_err(ncret)
    3113 
    3114             ncret = nf90_inq_varid(ncid, 'ssrn', ncvarid)
    3115             call handle_nf90_err(ncret)
    3116             ncret = nf90_get_var(ncid, ncvarid, ssrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3117             call handle_nf90_err(ncret)
    3118 
    3119             ncret = nf90_inq_varid(ncid, 'surfstrn', ncvarid)
    3120             call handle_nf90_err(ncret)
    3121             ncret = nf90_get_var(ncid, ncvarid, surfstrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3122             call handle_nf90_err(ncret)
    3123 
    3124             ncret = nf90_inq_varid(ncid, 'ustarn', ncvarid)
    3125             call handle_nf90_err(ncret)
    3126             ncret = nf90_get_var(ncid, ncvarid, ustarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3127             call handle_nf90_err(ncret)
    3128 
    3129             ncret = nf90_inq_varid(ncid, 'wstarn', ncvarid)
    3130             call handle_nf90_err(ncret)
    3131             ncret = nf90_get_var(ncid, ncvarid, wstarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3132             call handle_nf90_err(ncret)
    3133 
    3134             ncret = nf90_inq_varid(ncid, 'hmixn', ncvarid)
    3135             call handle_nf90_err(ncret)
    3136             ncret = nf90_get_var(ncid, ncvarid, hmixn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3137             call handle_nf90_err(ncret)
    3138 
    3139             ncret = nf90_inq_varid(ncid, 'tropopausen', ncvarid)
    3140             call handle_nf90_err(ncret)
    3141             ncret = nf90_get_var(ncid, ncvarid, tropopausen(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3142             call handle_nf90_err(ncret)
    3143 
    3144             ncret = nf90_inq_varid(ncid, 'olin', ncvarid)
    3145             call handle_nf90_err(ncret)
    3146             ncret = nf90_get_var(ncid, ncvarid, olin(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3147             call handle_nf90_err(ncret)
    3148 
    3149             ncret = nf90_inq_varid(ncid, 'diffkn', ncvarid)
    3150             call handle_nf90_err(ncret)
    3151             ncret = nf90_get_var(ncid, ncvarid, diffkn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
    3152             call handle_nf90_err(ncret)
    3153 
    3154             ncret = nf90_inq_varid(ncid, 'vdepn', ncvarid)
    3155             call handle_nf90_err(ncret)
    3156             ncret = nf90_get_var(ncid, ncvarid, vdepn(0:nxmaxn-1,0:nymaxn-1,1:maxspec,cm_index,1:maxnests))
    3157             call handle_nf90_err(ncret)
    3158 
    3159 
    3160 
    3161 
    3162             PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
    3163             PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
    3164             PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
     3336
     3337!            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
     3338!            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
     3339!            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
    31653340
    31663341
    31673342
    31683343            ! Auxiliary variables for nests
    3169 
    3170 
    3171 #ifdef RAWBIN
    31723344            READ(iounit) xresoln(:)
    31733345            READ(iounit) yresoln(:)
     
    31753347            READ(iounit) yln(:)
    31763348            READ(iounit) xrn(:)
    3177             READ(iounit) yrn(:)
    3178 #endif
    3179 
    3180 
    3181             ncret = nf90_inq_varid(ncid, 'xresoln', ncvarid)
    3182             call handle_nf90_err(ncret)
    3183             ncret = nf90_get_var(ncid, ncvarid, xresoln(0:maxnests))
    3184             call handle_nf90_err(ncret)
    3185 
    3186             ncret = nf90_inq_varid(ncid, 'yresoln', ncvarid)
    3187             call handle_nf90_err(ncret)
    3188             ncret = nf90_get_var(ncid, ncvarid, yresoln(0:maxnests))
    3189             call handle_nf90_err(ncret)
    3190 
    3191             ncret = nf90_inq_varid(ncid, 'xln', ncvarid)
    3192             call handle_nf90_err(ncret)
    3193             ncret = nf90_get_var(ncid, ncvarid, xln(1:maxnests))
    3194             call handle_nf90_err(ncret)
    3195 
    3196             ncret = nf90_inq_varid(ncid, 'yln', ncvarid)
    3197             call handle_nf90_err(ncret)
    3198             ncret = nf90_get_var(ncid, ncvarid, yln(1:maxnests))
    3199             call handle_nf90_err(ncret)
    3200 
    3201             ncret = nf90_inq_varid(ncid, 'xrn', ncvarid)
    3202             call handle_nf90_err(ncret)
    3203             ncret = nf90_get_var(ncid, ncvarid, xrn(1:maxnests))
    3204             call handle_nf90_err(ncret)
    3205 
    3206             ncret = nf90_inq_varid(ncid, 'yrn', ncvarid)
    3207             call handle_nf90_err(ncret)
    3208             ncret = nf90_get_var(ncid, ncvarid, yrn(1:maxnests))
    3209             call handle_nf90_err(ncret)
    3210 
    3211 
    3212 
    3213             PRINT *, 'SUM(yresoln): ', SUM(yresoln)
    3214             PRINT *, 'SUM(xrn): ', SUM(xrn)
     3349
     3350
     3351!            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
     3352!            PRINT *, 'SUM(xrn): ', SUM(xrn)
    32153353
    32163354
    32173355
    32183356            ! Variables for polar stereographic projection
    3219 
    3220 
    3221 #ifdef RAWBIN
    32223357            READ(iounit) xglobal, sglobal, nglobal
    32233358            READ(iounit) switchnorthg, switchsouthg
    32243359            READ(iounit) southpolemap(:)
    32253360            READ(iounit) northpolemap(:)
    3226 #endif
    3227 
    3228             ncret = nf90_inq_varid(ncid, 'southpolemap', ncvarid)
    3229             call handle_nf90_err(ncret)
    3230             ncret = nf90_get_var(ncid, ncvarid, southpolemap(:))
    3231             call handle_nf90_err(ncret)
    3232 
    3233             ncret = nf90_inq_varid(ncid, 'northpolemap', ncvarid)
    3234             call handle_nf90_err(ncret)
    3235             ncret = nf90_get_var(ncid, ncvarid, northpolemap(:))
    3236             call handle_nf90_err(ncret)
    3237 
    3238             ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
    3239             ! to INTEGER for NetCDF storage
    3240             ncret = nf90_inq_varid(ncid, 'xglobal', ncvarid)
    3241             call handle_nf90_err(ncret)
    3242             ncret = nf90_get_var(ncid, ncvarid, temp_integer)
    3243             call handle_nf90_err(ncret)
    3244             xglobal = integer2logical(temp_integer)
    3245 
    3246             ncret = nf90_inq_varid(ncid, 'sglobal', ncvarid)
    3247             call handle_nf90_err(ncret)
    3248             ncret = nf90_get_var(ncid, ncvarid, temp_integer)
    3249             call handle_nf90_err(ncret)
    3250             sglobal = integer2logical(temp_integer)
    3251 
    3252             ncret = nf90_inq_varid(ncid, 'nglobal', ncvarid)
    3253             call handle_nf90_err(ncret)
    3254             ncret = nf90_get_var(ncid, ncvarid, temp_integer)
    3255             call handle_nf90_err(ncret)
    3256             nglobal = integer2logical(temp_integer)
    3257 
    3258             ncret = nf90_inq_varid(ncid, 'switchnorthg', ncvarid)
    3259             call handle_nf90_err(ncret)
    3260             ncret = nf90_get_var(ncid, ncvarid, switchnorthg)
    3261             call handle_nf90_err(ncret)
    3262 
    3263             ncret = nf90_inq_varid(ncid, 'switchsouthg', ncvarid)
    3264             call handle_nf90_err(ncret)
    3265             ncret = nf90_get_var(ncid, ncvarid, switchsouthg)
    3266             call handle_nf90_err(ncret)
    3267 
    3268 
    3269             PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
    3270             PRINT *, 'xglobal: ', xglobal
    3271             PRINT *, 'sglobal: ', sglobal
    3272             PRINT *, 'nglobal: ', nglobal
    3273             PRINT *, 'switchsouthg: ', switchsouthg
     3361
     3362
     3363!            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
     3364!            PRINT *, 'xglobal: ', xglobal
     3365!            PRINT *, 'sglobal: ', sglobal
     3366!            PRINT *, 'nglobal: ', nglobal
     3367!            PRINT *, 'switchsouthg: ', switchsouthg
    32743368
    32753369
     
    32773371
    32783372            ! Variables declared in conv_mod (convection)
    3279 
    3280 
    3281 #ifdef RAWBIN
    32823373            READ(iounit) pconv(:)
    32833374            READ(iounit) phconv(:)
     
    32973388            READ(iounit) psconv, tt2conv, td2conv
    32983389            READ(iounit) nconvlev, nconvtop
    3299 #endif
    3300 
    3301 
    3302 
    3303             ncret = nf90_inq_varid(ncid, 'pconv', ncvarid)
    3304             call handle_nf90_err(ncret)
    3305             ncret = nf90_get_var(ncid, ncvarid, pconv(:))
    3306             call handle_nf90_err(ncret)
    3307 
    3308             ncret = nf90_inq_varid(ncid, 'dpr', ncvarid)
    3309             call handle_nf90_err(ncret)
    3310             ncret = nf90_get_var(ncid, ncvarid, dpr(:))
    3311             call handle_nf90_err(ncret)
    3312 
    3313             ncret = nf90_inq_varid(ncid, 'pconv_hpa', ncvarid)
    3314             call handle_nf90_err(ncret)
    3315             ncret = nf90_get_var(ncid, ncvarid, pconv_hpa(:))
    3316             call handle_nf90_err(ncret)
    3317 
    3318             ncret = nf90_inq_varid(ncid, 'ft', ncvarid)
    3319             call handle_nf90_err(ncret)
    3320             ncret = nf90_get_var(ncid, ncvarid, ft(:))
    3321             call handle_nf90_err(ncret)
    3322 
    3323             ncret = nf90_inq_varid(ncid, 'fq', ncvarid)
    3324             call handle_nf90_err(ncret)
    3325             ncret = nf90_get_var(ncid, ncvarid, fq(:))
    3326             call handle_nf90_err(ncret)
    3327 
    3328             ncret = nf90_inq_varid(ncid, 'sub', ncvarid)
    3329             call handle_nf90_err(ncret)
    3330             ncret = nf90_get_var(ncid, ncvarid, sub(:))
    3331             call handle_nf90_err(ncret)
    3332 
    3333             ncret = nf90_inq_varid(ncid, 'phconv', ncvarid)
    3334             call handle_nf90_err(ncret)
    3335             ncret = nf90_get_var(ncid, ncvarid, phconv(:))
    3336             call handle_nf90_err(ncret)
    3337 
    3338             ncret = nf90_inq_varid(ncid, 'phconv_hpa', ncvarid)
    3339             call handle_nf90_err(ncret)
    3340             ncret = nf90_get_var(ncid, ncvarid, phconv_hpa(:))
    3341             call handle_nf90_err(ncret)
    3342 
    3343             ncret = nf90_inq_varid(ncid, 'tconv', ncvarid)
    3344             call handle_nf90_err(ncret)
    3345             ncret = nf90_get_var(ncid, ncvarid, tconv(:))
    3346             call handle_nf90_err(ncret)
    3347 
    3348             ncret = nf90_inq_varid(ncid, 'qconv', ncvarid)
    3349             call handle_nf90_err(ncret)
    3350             ncret = nf90_get_var(ncid, ncvarid, qconv(:))
    3351             call handle_nf90_err(ncret)
    3352 
    3353             ncret = nf90_inq_varid(ncid, 'qsconv', ncvarid)
    3354             call handle_nf90_err(ncret)
    3355             ncret = nf90_get_var(ncid, ncvarid, qsconv(:))
    3356             call handle_nf90_err(ncret)
    3357 
    3358             ncret = nf90_inq_varid(ncid, 'fmass', ncvarid)
    3359             call handle_nf90_err(ncret)
    3360             ncret = nf90_get_var(ncid, ncvarid, fmass(:,:))
    3361             call handle_nf90_err(ncret)
    3362 
    3363             ncret = nf90_inq_varid(ncid, 'fmassfrac', ncvarid)
    3364             call handle_nf90_err(ncret)
    3365             ncret = nf90_get_var(ncid, ncvarid, fmassfrac(:,:))
    3366             call handle_nf90_err(ncret)
    3367 
    3368             ncret = nf90_inq_varid(ncid, 'cbaseflux', ncvarid)
    3369             call handle_nf90_err(ncret)
    3370             ncret = nf90_get_var(ncid, ncvarid, cbaseflux(0:nxmax-1,0:nymax-1))
    3371             call handle_nf90_err(ncret)
    3372 
    3373             ncret = nf90_inq_varid(ncid, 'cbasefluxn', ncvarid)
    3374             call handle_nf90_err(ncret)
    3375             ncret = nf90_get_var(ncid, ncvarid, cbasefluxn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
    3376             call handle_nf90_err(ncret)
    3377 
    3378             ncret = nf90_inq_varid(ncid, 'psconv', ncvarid)
    3379             call handle_nf90_err(ncret)
    3380             ncret = nf90_get_var(ncid, ncvarid, psconv)
    3381             call handle_nf90_err(ncret)
    3382 
    3383             ncret = nf90_inq_varid(ncid, 'tt2conv', ncvarid)
    3384             call handle_nf90_err(ncret)
    3385             ncret = nf90_get_var(ncid, ncvarid, tt2conv)
    3386             call handle_nf90_err(ncret)
    3387 
    3388             ncret = nf90_inq_varid(ncid, 'td2conv', ncvarid)
    3389             call handle_nf90_err(ncret)
    3390             ncret = nf90_get_var(ncid, ncvarid, td2conv)
    3391             call handle_nf90_err(ncret)
    3392 
    3393             ncret = nf90_inq_varid(ncid, 'nconvlev', ncvarid)
    3394             call handle_nf90_err(ncret)
    3395             ncret = nf90_get_var(ncid, ncvarid, nconvlev)
    3396             call handle_nf90_err(ncret)
    3397 
    3398             ncret = nf90_inq_varid(ncid, 'nconvtop', ncvarid)
    3399             call handle_nf90_err(ncret)
    3400             ncret = nf90_get_var(ncid, ncvarid, nconvtop)
    3401             call handle_nf90_err(ncret)
    3402 
    3403 
    3404 
    3405 
    3406             PRINT *, 'SUM(pconv): ', SUM(pconv)
    3407             PRINT *, 'SUM(qconv): ', SUM(qconv)
    3408             PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
    3409             PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
    3410             PRINT *, 'tt2conv: ', tt2conv
    3411             PRINT *, 'nconvlev: ', nconvlev
     3390
     3391
     3392
     3393
     3394
     3395!            PRINT *, 'SUM(pconv): ', SUM(pconv)
     3396!            PRINT *, 'SUM(qconv): ', SUM(qconv)
     3397!            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
     3398!            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
     3399!            PRINT *, 'tt2conv: ', tt2conv
     3400!            PRINT *, 'nconvlev: ', nconvlev
    34123401
    34133402
    34143403
    34153404        ELSE
    3416             STOP 'fpio(): Illegal operation'
     3405            STOP 'fpio_rawbin(): Illegal operation'
    34173406           
    34183407        ENDIF
    3419     END SUBROUTINE fpio
    3420 
    3421     SUBROUTINE fpmetbinary_filetext(filename, cm_index)
    3422 
    3423         ! This is a utility subroutine meant to be used for testing purposes.
    3424         ! It facilitates the text output of variables read in from the
    3425         ! specified .fp file.  This routine will easily cause the program
    3426         ! to crash due memory allocation issues, particularly when you are
    3427         ! trying to text print 3d arrays in a single formatted statetment.
    3428        
    3429         CHARACTER(LEN=*), INTENT(IN) :: filename
    3430         INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
    3431                                                   ! most com_mod variables.
    3432                                                   ! Should be 1 or 2
    3433 
    3434         !OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', status='REPLACE', &
    3435         !    form="formatted", access="stream")
    3436         OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', &
    3437              form="formatted", access="APPEND")
    3438 
    3439         WRITE(IOUNIT_TEXTOUT, *) 'oro: ', oro
    3440         WRITE(IOUNIT_TEXTOUT, *) 'excessoro: ', excessoro
    3441         WRITE(IOUNIT_TEXTOUT, *) 'lsm: ', lsm
    3442         WRITE(IOUNIT_TEXTOUT, *) 'xlanduse: ', xlanduse
    3443         WRITE(IOUNIT_TEXTOUT, *) 'height: ', height
    3444 
    3445         WRITE(IOUNIT_TEXTOUT, *) 'uu: ', uu(:,:,:,cm_index)
    3446         WRITE(IOUNIT_TEXTOUT, *) 'vv: ', vv(:,:,:,cm_index)
    3447         WRITE(IOUNIT_TEXTOUT, *) 'uupol: ', uupol(:,:,:,cm_index)
    3448         WRITE(IOUNIT_TEXTOUT, *) 'vvpol: ', vvpol(:,:,:,cm_index)
    3449         WRITE(IOUNIT_TEXTOUT, *) 'ww: ', ww(:,:,:,cm_index)
    3450         WRITE(IOUNIT_TEXTOUT, *) 'tt: ', tt(:,:,:,cm_index)
    3451         WRITE(IOUNIT_TEXTOUT, *) 'qv: ', qv(:,:,:,cm_index)
    3452         WRITE(IOUNIT_TEXTOUT, *) 'pv: ', pv(:,:,:,cm_index)
    3453         WRITE(IOUNIT_TEXTOUT, *) 'rho: ', rho(:,:,:,cm_index)
    3454         WRITE(IOUNIT_TEXTOUT, *) 'drhodz: ', drhodz(:,:,:,cm_index)
    3455         WRITE(IOUNIT_TEXTOUT, *) 'tth: ', tth(:,:,:,cm_index)
    3456         WRITE(IOUNIT_TEXTOUT, *) 'qvh: ', qvh(:,:,:,cm_index)
    3457         WRITE(IOUNIT_TEXTOUT, *) 'pplev: ', pplev(:,:,:,cm_index)
    3458         WRITE(IOUNIT_TEXTOUT, *) 'clouds: ', clouds(:,:,:,cm_index)
    3459         WRITE(IOUNIT_TEXTOUT, *) 'cloudsh: ', cloudsh(:,:,cm_index)
    3460 
    3461 
    3462 
    3463 
    3464         CLOSE(IOUNIT_TEXTOUT)
    3465     END SUBROUTINE fpmetbinary_filetext
     3408    END SUBROUTINE fpio_rawbin
     3409
     3410
     3411
    34663412
    34673413    subroutine handle_nf90_err(status)
  • flexpart_code/par_mod.F90

    r7e5f1dc rb398fb6  
    157157  !*********************************************
    158158
    159   integer,parameter :: maxnests=1, nxmaxn=180, nymaxn=100
    160   !integer,parameter :: maxnests=0, nxmaxn=0, nymaxn=0
     159  !integer,parameter :: maxnests=1, nxmaxn=180, nymaxn=100
     160  integer,parameter :: maxnests=0, nxmaxn=0, nymaxn=0
    161161  !integer,parameter :: maxnests=1,nxmaxn=251,nymaxn=151
    162162
  • flexpart_code/readwind_nests.F90

    r496c607 rb398fb6  
    275275    ! Get the fpname
    276276    fpname = vtable_get_fpname(igrib, my_vtable)
    277     print *, 'readwind_nests(): fpname: ', trim(fpname)
     277    !print *, 'readwind_nests(): fpname: ', trim(fpname)
    278278
    279279
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG