Changeset b6b9db0 in flexpart.git


Ignore:
Timestamp:
Apr 27, 2017, 9:43:15 AM (7 years ago)
Author:
Don Morton <Don.Morton@…>
Branches:
FPv9.3.2, grib2nc4_repair
Children:
d127e10
Parents:
64c820a
Message:

Made all code changes in transition from FPv9.3.1 to FPv9.3.2. Still
need to modify makefiles for NC4.

Location:
flexpart_code
Files:
1 added
1 deleted
1 edited

Legend:

Unmodified
Added
Removed
  • flexpart_code/fpmetbinary_mod.F90

    r64c820a rb6b9db0  
    4444    USE com_mod
    4545    USE conv_mod
    46     USE par_mod, ONLY : nxmax, nymax, nzmax, nuvzmax, nwzmax
     46    USE par_mod, ONLY : nxmax, nymax, nzmax, nuvzmax, nwzmax, numclass, maxspec, &
     47&                       maxnests, nxmaxn, nymaxn
     48
     49    USE netcdf
    4750
    4851    IMPLICIT NONE
     
    5255    INTEGER, PARAMETER :: IOUNIT_DUMP = 33, IOUNIT_LOAD = 34, &
    5356                          IOUNIT_TEXTOUT = 35
     57                         
     58                   
     59    INTEGER, PARAMETER :: PREPROC_FMT_STR_DIM = 11
    5460
    5561    ! When a change is made to the format of the preprocessed file, such that
    5662    ! this routine will not be able to read a previous version, this version
    5763    ! string should be modified
    58     CHARACTER(LEN=12), PARAMETER :: PREPROC_FORMAT_VERSION_STR = 'FP_p-9.3.1'//char(0)
     64
     65
     66    ! WARNING - for now, for NC4 compatability, make sure that the PREPROC_FMT_STR_DIM
     67    ! defined above is exactly the length of the string PLUS the null character added
     68    ! I've had a hell of a time making it all compatible with NC4 (DJM)
     69    CHARACTER(LEN=PREPROC_FMT_STR_DIM), PARAMETER :: PREPROC_FORMAT_VERSION_STR = 'FP_p-9.3.2'//char(0)
    5970
    6071    PRIVATE IOUNIT_DUMP, IOUNIT_LOAD, IOUNIT_TEXTOUT, fpio,    &
     
    90101        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
    91102
     103        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
     104
    92105        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
    93         OPEN(IOUNIT_DUMP, file=filename, action='WRITE', status='REPLACE', form="unformatted", access="stream")
    94         CALL fpio(IOUNIT_DUMP, 'DUMP', cm_index)
    95         CLOSE(IOUNIT_DUMP)
     106
     107        ! Create and open NC4 file for writing
     108        PRINT *, 'Opening NC4 file...'
     109        ncretval = nf90_create(filename, &
     110&                              OR(NF90_CLOBBER, NF90_HDF5), &
     111&                              ncid)
     112
     113
     114
     115        CALL fpio(ncid, 'DUMP', cm_index)
     116
     117        PRINT *, 'Closing NC4 file...'
     118        ncretval = nf90_close(ncid)
     119
    96120        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
    97121
     
    105129                                                  ! Should be 1 or 2
    106130
     131        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
     132
    107133        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
    108134
    109135        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
    110         OPEN(IOUNIT_LOAD, file=filename, action='READ', status='OLD', form="unformatted", access="stream")
    111         CALL fpio(IOUNIT_LOAD, 'LOAD', cm_index)
    112         CLOSE(IOUNIT_LOAD)
     136
     137PRINT *, "filename: ", filename
     138PRINT *, "Opening nc file for reading: ", filename
     139        ncretval = nf90_open(filename, NF90_NOWRITE, ncid)
     140        call handle_nf90_err(ncretval)
     141PRINT *, 'OPENED NC4 FILE FOR READING...'
     142
     143
     144        CALL fpio(ncid, 'LOAD', cm_index)
     145
    113146        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
    114147        !PRINT *, 'Load walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
    115148    END SUBROUTINE fpmetbinary_load
    116149
    117     SUBROUTINE fpmetbinary_zero(cm_index)
     150
     151
     152
     153    SUBROUTINE fpio(ncid, op, cm_index)
     154        IMPLICIT NONE
     155        INTEGER, INTENT(IN) :: ncid               ! NetCDF file id
     156        CHARACTER(LEN=4), INTENT(IN) :: op        ! Operation - DUMP or LOAD
    118157        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
    119158                                                  ! most com_mod variables.
     
    121160
    122161
    123         ! Zeroes out, in local datastructures, the values dumped/loaded
    124         ! This was written primarily as a testing mechanism.
    125         ! The lines here correspond to READ and WRITE in the dump/load routines
    126 
    127         ! Scalar values
    128         nx=0.0; ny=0.0; nxmin1=0.0; nymin1=0.0; nxfield=0.0
    129         nuvz=0.0; nwz=0.0; nz=0.0; nmixz=0.0; nlev_ec=0.0
    130         dx=0.0; dy=0.0; xlon0=0.0; ylat0=0.0; dxconst=0.0; dyconst=0.0
    131 
    132         ! Fixed fields, static in time
    133         oro=0.0; excessoro=0.0; lsm=0.0; xlanduse=0.0; height=0.0
    134 
    135         ! 3d fields
    136         uu(:,:,:,cm_index) = 0.0
    137         vv(:,:,:,cm_index) = 0.0
    138         uupol(:,:,:,cm_index) = 0.0
    139         vvpol(:,:,:,cm_index) = 0.0
    140         ww(:,:,:,cm_index) = 0.0
    141         tt(:,:,:,cm_index) = 0.0
    142         qv(:,:,:,cm_index) = 0.0
    143         pv(:,:,:,cm_index) = 0.0
    144         rho(:,:,:,cm_index) = 0.0
    145         drhodz(:,:,:,cm_index) = 0.0
    146         tth(:,:,:,cm_index) = 0.0
    147         qvh(:,:,:,cm_index) = 0.0
    148         pplev(:,:,:,cm_index) = 0.0
    149         clouds(:,:,:,cm_index) = 0.0
    150         cloudsh(:,:,cm_index) = 0.0
    151 
    152         ! 2d fields
    153         ps(:,:,:,cm_index) = 0.0
    154         sd(:,:,:,cm_index) = 0.0
    155         msl(:,:,:,cm_index) = 0.0
    156         tcc(:,:,:,cm_index) = 0.0
    157         u10(:,:,:,cm_index) = 0.0
    158         v10(:,:,:,cm_index) = 0.0
    159         tt2(:,:,:,cm_index) = 0.0
    160         td2(:,:,:,cm_index) = 0.0
    161         lsprec(:,:,:,cm_index) = 0.0
    162         convprec(:,:,:,cm_index) = 0.0
    163         sshf(:,:,:,cm_index) = 0.0
    164         ssr(:,:,:,cm_index) = 0.0
    165         surfstr(:,:,:,cm_index) = 0.0
    166         ustar(:,:,:,cm_index) = 0.0
    167         wstar(:,:,:,cm_index) = 0.0
    168         hmix(:,:,:,cm_index) = 0.0
    169         tropopause(:,:,:,cm_index) = 0.0
    170         oli(:,:,:,cm_index) = 0.0
    171         diffk(:,:,:,cm_index) = 0.0
    172         vdep(:,:,:,cm_index) = 0.0
    173 
    174         ! 1d fields
    175         z0(:) = 0.0
    176         akm(:) = 0.0
    177         bkm(:) = 0.0
    178         akz(:) = 0.0
    179         bkz(:) = 0.0
    180         aknew(:) = 0.0
    181         bknew(:) = 0.0
    182 
    183         ! Nested, scalar values (for each nest)
    184         nxn(:) = 0.0
    185         nyn(:) = 0.0
    186         dxn(:) = 0.0
    187         dyn(:) = 0.0
    188         xlon0n(:) = 0.0
    189         ylat0n(:) = 0.0
    190 
    191         ! Nested fields, static in time
    192         oron=0.0; excessoron=0.0; lsmn=0.0; xlandusen=0.0
    193 
    194         ! 3d nested fields
    195         uun(:,:,:,cm_index,:) = 0.0
    196         wwn(:,:,:,cm_index,:) = 0.0
    197         ttn(:,:,:,cm_index,:) = 0.0
    198         qvn(:,:,:,cm_index,:) = 0.0
    199         pvn(:,:,:,cm_index,:) = 0.0
    200         cloudsn(:,:,:,cm_index,:) = 0.0
    201         cloudsnh(:,:,cm_index,:) = 0.0
    202         rhon(:,:,:,cm_index,:) = 0.0
    203         drhodzn(:,:,:,cm_index,:) = 0.0
    204         tthn(:,:,:,cm_index,:) = 0.0
    205         qvhn(:,:,:,cm_index,:) = 0.0
    206 
    207         ! 2d nested fields
    208         psn(:,:,:,cm_index,:) = 0.0
    209         sdn(:,:,:,cm_index,:) = 0.0
    210         msln(:,:,:,cm_index,:) = 0.0
    211         tccn(:,:,:,cm_index,:) = 0.0
    212         u10n(:,:,:,cm_index,:) = 0.0
    213         v10n(:,:,:,cm_index,:) = 0.0
    214         tt2n(:,:,:,cm_index,:) = 0.0
    215         td2n(:,:,:,cm_index,:) = 0.0
    216         lsprecn(:,:,:,cm_index,:) = 0.0
    217         convprecn(:,:,:,cm_index,:) = 0.0
    218         sshfn(:,:,:,cm_index,:) = 0.0
    219         ssrn(:,:,:,cm_index,:) = 0.0
    220         surfstrn(:,:,:,cm_index,:) = 0.0
    221         ustarn(:,:,:,cm_index,:) = 0.0
    222         wstarn(:,:,:,cm_index,:) = 0.0
    223         hmixn(:,:,:,cm_index,:) = 0.0
    224         tropopausen(:,:,:,cm_index,:) = 0.0
    225         olin(:,:,:,cm_index,:) = 0.0
    226         diffkn(:,:,:,cm_index,:) = 0.0
    227         vdepn(:,:,:,cm_index,:) = 0.0
    228 
    229         ! Auxiliary variables for nests
    230         xresoln(:) = 0.0
    231         yresoln(:) = 0.0
    232         xln(:) = 0.0
    233         yln(:) = 0.0
    234         xrn(:) = 0.0
    235         yrn(:) = 0.0
    236 
    237         ! Variables for polar stereographic projection
    238         xglobal=.FALSE.; sglobal=.FALSE.; nglobal=.FALSE.
    239         switchnorthg=0.0; switchsouthg=0.0
    240         southpolemap(:) = 0.0
    241         northpolemap(:) = 0.0
    242 
    243         ! Variables declared in conv_mod (convection)
    244         pconv(:) = 0.0
    245         phconv(:) = 0.0
    246         dpr(:) = 0.0
    247         pconv_hpa(:) = 0.0
    248         phconv_hpa(:) = 0.0
    249         ft(:) = 0.0
    250         fq(:) = 0.0
    251         fmass(:,:) = 0.0
    252         sub(:) = 0.0
    253         fmassfrac(:,:) = 0.0
    254         cbaseflux(:,:) = 0.0
    255         cbasefluxn(:,:,:) = 0.0
    256         tconv(:) = 0.0
    257         qconv(:) = 0.0
    258         qsconv(:) = 0.0
    259         psconv=0.0; tt2conv=0.0; td2conv=0.0
    260         nconvlev=0.0; nconvtop=0.0
    261 
    262     END SUBROUTINE fpmetbinary_zero
    263 
    264     SUBROUTINE fpio(iounit, op, cm_index)
     162        ! Helper functions (in this module)
     163        !INTEGER :: logical2integer
     164        !LOGICAL :: integer2logical
     165
     166        INTEGER :: temp_integer   ! temporary value
     167        INTEGER :: ncret          ! Return value from NetCDF calls
     168        INTEGER :: ncvarid          ! NetCDF variable ID
     169
     170        INTEGER :: nxmax_dimid, nymax_dimid, nzmax_dimid, nuvzmax_dimid, nwzmax_dimid, &
     171&                  maxspec_dimid, numclass_dimid, maxnests_dimid, nxmaxn_dimid, nymaxn_dimid, &
     172&                  zero_to_nzmax_dimid, zero_to_maxnests_dimid, polemap_dimid, &
     173&                  nconvlevmax_dimid, na_dimid, preproc_fmt_str_dimid
     174
     175
     176        INTEGER, DIMENSION(1) :: dim1dids    ! Dimension IDs for 1D arrays
     177        INTEGER, DIMENSION(2) :: dim2dids    ! Dimension IDs for 2D arrays
     178        INTEGER, DIMENSION(3) :: dim3dids    ! Dimension IDs for 3D arrays
     179        INTEGER, DIMENSION(4) :: dim4dids    ! Dimension IDs for 4D arrays
     180        INTEGER, DIMENSION(5) :: dim5dids    ! Dimension IDs for 5D arrays
     181
     182
     183
     184
     185        ! These are used when loading in dimensions from NC file
     186        CHARACTER(LEN=NF90_MAX_NAME) :: nxmax_dimname, nymax_dimname, nzmax_dimname, &
     187&                                       nuvzmax_dimname, nwzmax_dimname,&
     188&                                       maxspec_dimname, numclass_dimname,&
     189&                                       maxnests_dimname, nxmaxn_dimname, nymaxn_dimname, &
     190&                                       zero_to_nzmax_dimname, zero_to_maxnests_dimname, &
     191&                                       polemap_dimname, nconvlevmax_dimname, na_dimname, &
     192&                                       preproc_fmt_str_dimname
     193
     194        ! These are temporary variables, used in the LOAD option, for
     195        ! comparing against the current values in FLEXPART of nxmax, nymax, ...
     196        INTEGER :: temp_nxmax, temp_nymax, temp_nzmax, &
     197&                  temp_nuvzmax, temp_nwzmax, &
     198&                  temp_maxspec, temp_numclass,&
     199&                  temp_maxnests, temp_nxmaxn, temp_nymaxn, temp_preproc_fmt_str_dim
     200
     201        CHARACTER(LEN=PREPROC_FMT_STR_DIM) :: temp_preproc_format_version_str
     202
     203        CHARACTER(LEN=128) :: errmesg
     204
     205        INTEGER, PARAMETER :: DEF_LEVEL = 3
     206
     207        if (op == 'DUMP') THEN
     208
     209
     210            ! Write the preprocessing format version string
     211            !  NEED TO FILL THIS IN FOR NC4
     212
     213
     214
     215
     216            ! Write the compiled max dimensions from par_mod - these are
     217            ! not meant to be reassigned during a LOAD, but used as "header"
     218            ! information to provide the structure of arrays
     219
     220
     221
     222            ! Dimension for the preprocessing format string
     223            ncret = nf90_def_dim(ncid, 'preproc_fmt_str_dim', PREPROC_FMT_STR_DIM, &
     224&                                preproc_fmt_str_dimid)
     225            call handle_nf90_err(ncret)
     226
     227            ncret = nf90_def_dim(ncid, 'nxmax', nxmax, nxmax_dimid)
     228            call handle_nf90_err(ncret)
     229            ncret = nf90_def_dim(ncid, 'nymax', nymax, nymax_dimid)
     230            call handle_nf90_err(ncret)
     231            ncret = nf90_def_dim(ncid, 'nzmax', nzmax, nzmax_dimid)
     232            call handle_nf90_err(ncret)
     233            ncret = nf90_def_dim(ncid, 'nuvzmax', nuvzmax, nuvzmax_dimid)
     234            call handle_nf90_err(ncret)
     235            ncret = nf90_def_dim(ncid, 'nwzmax', nwzmax, nwzmax_dimid)
     236            call handle_nf90_err(ncret)
     237            ncret = nf90_def_dim(ncid, 'maxspec', maxspec, maxspec_dimid)
     238            call handle_nf90_err(ncret)
     239            ncret = nf90_def_dim(ncid, 'numclass', numclass, numclass_dimid)
     240            call handle_nf90_err(ncret)
     241
     242            ! There are a handful of variables indexed from 0 to n, rather than 0 to n-1,
     243            ! so these dimensions handle that.  What a pain.
     244            ncret = nf90_def_dim(ncid, 'zero_to_nzmax', nzmax+1, zero_to_nzmax_dimid)
     245            call handle_nf90_err(ncret)
     246            ncret = nf90_def_dim(ncid, 'zero_to_maxnests', maxnests+1, zero_to_maxnests_dimid)
     247            call handle_nf90_err(ncret)
     248
     249            ! This is for a couple of small arrays that store polar stereographic stuff
     250            ncret = nf90_def_dim(ncid, 'polemap_dim', 9, polemap_dimid)
     251            call handle_nf90_err(ncret)
     252
     253            ! These two values come from conv_mod
     254            ncret = nf90_def_dim(ncid, 'nconvlevmax_dim', nconvlevmax, nconvlevmax_dimid)
     255            call handle_nf90_err(ncret)
     256            ncret = nf90_def_dim(ncid, 'na_dim', na, na_dimid)
     257            call handle_nf90_err(ncret)
     258
     259            ! Scalar values
     260
     261
     262            dim1dids = (/preproc_fmt_str_dimid/)
     263            ncret = nf90_def_var(ncid, 'preproc_fmt_str', NF90_CHAR, &
     264&                                       dim1dids, ncvarid)
     265            call handle_nf90_err(ncret)
     266            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     267&                                        shuffle=0,     &
     268&                                        deflate=1,     &
     269&                                        deflate_level=DEF_LEVEL)
     270            call handle_nf90_err(ncret)
     271            ncret = nf90_put_var(ncid, ncvarid, PREPROC_FORMAT_VERSION_STR(1:preproc_fmt_str_dim))
     272            call handle_nf90_err(ncret)
     273
     274
     275            ncret = nf90_def_var(ncid, 'nx', NF90_INT, ncvarid)
     276            call handle_nf90_err(ncret)
     277            ncret = nf90_put_var(ncid, ncvarid, nx)
     278            call handle_nf90_err(ncret)
     279
     280            ncret = nf90_def_var(ncid, 'ny', NF90_INT, ncvarid)
     281            call handle_nf90_err(ncret)
     282            ncret = nf90_put_var(ncid, ncvarid, ny)
     283            call handle_nf90_err(ncret)
     284
     285            ncret = nf90_def_var(ncid, 'nxmin1', NF90_INT, ncvarid)
     286            call handle_nf90_err(ncret)
     287            ncret = nf90_put_var(ncid, ncvarid, nxmin1)
     288            call handle_nf90_err(ncret)
     289
     290            ncret = nf90_def_var(ncid, 'nymin1', NF90_INT, ncvarid)
     291            call handle_nf90_err(ncret)
     292            ncret = nf90_put_var(ncid, ncvarid, nymin1)
     293            call handle_nf90_err(ncret)
     294
     295            ncret = nf90_def_var(ncid, 'nxfield', NF90_INT, ncvarid)
     296            call handle_nf90_err(ncret)
     297            ncret = nf90_put_var(ncid, ncvarid, nxfield)
     298            call handle_nf90_err(ncret)
     299
     300            ncret = nf90_def_var(ncid, 'nuvz', NF90_INT, ncvarid)
     301            call handle_nf90_err(ncret)
     302            ncret = nf90_put_var(ncid, ncvarid, nuvz)
     303            call handle_nf90_err(ncret)
     304
     305            ncret = nf90_def_var(ncid, 'nwz', NF90_INT, ncvarid)
     306            call handle_nf90_err(ncret)
     307            ncret = nf90_put_var(ncid, ncvarid, nwz)
     308            call handle_nf90_err(ncret)
     309
     310            ncret = nf90_def_var(ncid, 'nz', NF90_INT, ncvarid)
     311            call handle_nf90_err(ncret)
     312            ncret = nf90_put_var(ncid, ncvarid, nz)
     313            call handle_nf90_err(ncret)
     314
     315            ncret = nf90_def_var(ncid, 'nmixz', NF90_INT, ncvarid)
     316            call handle_nf90_err(ncret)
     317            ncret = nf90_put_var(ncid, ncvarid, nmixz)
     318            call handle_nf90_err(ncret)
     319
     320            ncret = nf90_def_var(ncid, 'nlev_ec', NF90_INT, ncvarid)
     321            call handle_nf90_err(ncret)
     322            ncret = nf90_put_var(ncid, ncvarid, nlev_ec)
     323            call handle_nf90_err(ncret)
     324
     325            ncret = nf90_def_var(ncid, 'dx', NF90_FLOAT, ncvarid)
     326            call handle_nf90_err(ncret)
     327            ncret = nf90_put_var(ncid, ncvarid, dx)
     328            call handle_nf90_err(ncret)
     329
     330            ncret = nf90_def_var(ncid, 'dy', NF90_FLOAT, ncvarid)
     331            call handle_nf90_err(ncret)
     332            ncret = nf90_put_var(ncid, ncvarid, dy)
     333            call handle_nf90_err(ncret)
     334
     335            ncret = nf90_def_var(ncid, 'xlon0', NF90_FLOAT, ncvarid)
     336            call handle_nf90_err(ncret)
     337            ncret = nf90_put_var(ncid, ncvarid, xlon0)
     338            call handle_nf90_err(ncret)
     339
     340            ncret = nf90_def_var(ncid, 'ylat0', NF90_FLOAT, ncvarid)
     341            call handle_nf90_err(ncret)
     342            ncret = nf90_put_var(ncid, ncvarid, ylat0)
     343            call handle_nf90_err(ncret)
     344
     345            ncret = nf90_def_var(ncid, 'dxconst', NF90_FLOAT, ncvarid)
     346            call handle_nf90_err(ncret)
     347            ncret = nf90_put_var(ncid, ncvarid, dxconst)
     348            call handle_nf90_err(ncret)
     349
     350            ncret = nf90_def_var(ncid, 'dyconst', NF90_FLOAT, ncvarid)
     351            call handle_nf90_err(ncret)
     352            ncret = nf90_put_var(ncid, ncvarid, dyconst)
     353            call handle_nf90_err(ncret)
     354
     355
     356
     357            ! Fixed fields, static in time
     358            dim2dids = (/nxmax_dimid, nymax_dimid/)
     359
     360            ncret = nf90_def_var(ncid, 'oro', NF90_FLOAT, &
     361&                                       dim2dids, ncvarid)
     362            call handle_nf90_err(ncret)
     363            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     364&                                        shuffle=0,     &
     365&                                        deflate=1,     &
     366&                                        deflate_level=DEF_LEVEL)
     367            call handle_nf90_err(ncret)
     368            ncret = nf90_put_var(ncid, ncvarid, &
     369&                                oro(0:nxmax-1, 0:nymax-1))
     370            call handle_nf90_err(ncret)
     371
     372            ncret = nf90_def_var(ncid, 'excessoro', NF90_FLOAT, &
     373&                                       dim2dids, ncvarid)
     374            call handle_nf90_err(ncret)
     375            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     376&                                        shuffle=0,     &
     377&                                        deflate=1,     &
     378&                                        deflate_level=DEF_LEVEL)
     379            call handle_nf90_err(ncret)
     380            ncret = nf90_put_var(ncid, ncvarid, &
     381&                                excessoro(0:nxmax-1, 0:nymax-1))
     382            call handle_nf90_err(ncret)
     383
     384            ncret = nf90_def_var(ncid, 'lsm', NF90_FLOAT, &
     385&                                       dim2dids, ncvarid)
     386            call handle_nf90_err(ncret)
     387            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     388&                                        shuffle=0,     &
     389&                                        deflate=1,     &
     390&                                        deflate_level=DEF_LEVEL)
     391            call handle_nf90_err(ncret)
     392            ncret = nf90_put_var(ncid, ncvarid, &
     393&                                lsm(0:nxmax-1, 0:nymax-1))
     394            call handle_nf90_err(ncret)
     395
     396            dim3dids = (/nxmax_dimid, nymax_dimid, numclass_dimid/)
     397            ! numclass comes from par_mod - number of land use classes
     398            ncret = nf90_def_var(ncid, 'xlanduse', NF90_FLOAT, &
     399&                                       dim3dids, ncvarid)
     400            call handle_nf90_err(ncret)
     401            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     402&                                        shuffle=0,     &
     403&                                        deflate=1,     &
     404&                                        deflate_level=DEF_LEVEL)
     405            call handle_nf90_err(ncret)
     406            ncret = nf90_put_var(ncid, ncvarid, &
     407&                                xlanduse(0:nxmax-1, 0:nymax-1, 1:numclass))
     408            call handle_nf90_err(ncret)
     409
     410            dim1dids = (/nzmax_dimid/)
     411            ncret = nf90_def_var(ncid, 'height', NF90_FLOAT, &
     412&                                       dim1dids, ncvarid)
     413            call handle_nf90_err(ncret)
     414            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     415&                                        shuffle=0,     &
     416&                                        deflate=1,     &
     417&                                        deflate_level=DEF_LEVEL)
     418            call handle_nf90_err(ncret)
     419            ncret = nf90_put_var(ncid, ncvarid, &
     420&                                height(1:nzmax))
     421            call handle_nf90_err(ncret)
     422
     423
     424
     425
     426            ! 3d fields
     427            dim3dids = (/nxmax_dimid, nymax_dimid, nzmax_dimid/)
     428
     429            ncret = nf90_def_var(ncid, 'uu', NF90_FLOAT, &
     430&                                       dim3dids, ncvarid)
     431            call handle_nf90_err(ncret)
     432            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     433&                                        shuffle=0,     &
     434&                                        deflate=1,     &
     435&                                        deflate_level=DEF_LEVEL)
     436            call handle_nf90_err(ncret)
     437            ncret = nf90_put_var(ncid, ncvarid, &
     438&                                uu(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
     439            call handle_nf90_err(ncret)
     440
     441            ncret = nf90_def_var(ncid, 'vv', NF90_FLOAT, &
     442&                                       dim3dids, ncvarid)
     443            call handle_nf90_err(ncret)
     444            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     445&                                        shuffle=0,     &
     446&                                        deflate=1,     &
     447&                                        deflate_level=DEF_LEVEL)
     448            call handle_nf90_err(ncret)
     449            ncret = nf90_put_var(ncid, ncvarid, &
     450&                                vv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
     451            call handle_nf90_err(ncret)
     452
     453            ncret = nf90_def_var(ncid, 'uupol', NF90_FLOAT, &
     454&                                       dim3dids, ncvarid)
     455            call handle_nf90_err(ncret)
     456            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     457&                                        shuffle=0,     &
     458&                                        deflate=1,     &
     459&                                        deflate_level=DEF_LEVEL)
     460            call handle_nf90_err(ncret)
     461            ncret = nf90_put_var(ncid, ncvarid, &
     462&                                uupol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
     463            call handle_nf90_err(ncret)
     464
     465            ncret = nf90_def_var(ncid, 'vvpol', NF90_FLOAT, &
     466&                                       dim3dids, ncvarid)
     467            call handle_nf90_err(ncret)
     468            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     469&                                        shuffle=0,     &
     470&                                        deflate=1,     &
     471&                                        deflate_level=DEF_LEVEL)
     472            call handle_nf90_err(ncret)
     473            ncret = nf90_put_var(ncid, ncvarid, &
     474&                                vvpol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
     475            call handle_nf90_err(ncret)
     476
     477            ncret = nf90_def_var(ncid, 'ww', NF90_FLOAT, &
     478&                                       dim3dids, ncvarid)
     479            call handle_nf90_err(ncret)
     480            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     481&                                        shuffle=0,     &
     482&                                        deflate=1,     &
     483&                                        deflate_level=DEF_LEVEL)
     484            call handle_nf90_err(ncret)
     485            ncret = nf90_put_var(ncid, ncvarid, &
     486&                                ww(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
     487            call handle_nf90_err(ncret)
     488
     489            ncret = nf90_def_var(ncid, 'tt', NF90_FLOAT, &
     490&                                       dim3dids, ncvarid)
     491            call handle_nf90_err(ncret)
     492            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     493&                                        shuffle=0,     &
     494&                                        deflate=1,     &
     495&                                        deflate_level=DEF_LEVEL)
     496            call handle_nf90_err(ncret)
     497            ncret = nf90_put_var(ncid, ncvarid, &
     498&                                tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
     499            call handle_nf90_err(ncret)
     500
     501            ncret = nf90_def_var(ncid, 'qv', NF90_FLOAT, &
     502&                                       dim3dids, ncvarid)
     503            call handle_nf90_err(ncret)
     504            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     505&                                        shuffle=0,     &
     506&                                        deflate=1,     &
     507&                                        deflate_level=DEF_LEVEL)
     508            call handle_nf90_err(ncret)
     509            ncret = nf90_put_var(ncid, ncvarid, &
     510&                                qv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
     511            call handle_nf90_err(ncret)
     512
     513            ncret = nf90_def_var(ncid, 'pv', NF90_FLOAT, &
     514&                                       dim3dids, ncvarid)
     515            call handle_nf90_err(ncret)
     516            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     517&                                        shuffle=0,     &
     518&                                        deflate=1,     &
     519&                                        deflate_level=DEF_LEVEL)
     520            call handle_nf90_err(ncret)
     521            ncret = nf90_put_var(ncid, ncvarid, &
     522&                                pv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
     523            call handle_nf90_err(ncret)
     524
     525            ncret = nf90_def_var(ncid, 'rho', NF90_FLOAT, &
     526&                                       dim3dids, ncvarid)
     527            call handle_nf90_err(ncret)
     528            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     529&                                        shuffle=0,     &
     530&                                        deflate=1,     &
     531&                                        deflate_level=DEF_LEVEL)
     532            call handle_nf90_err(ncret)
     533            ncret = nf90_put_var(ncid, ncvarid, &
     534&                                rho(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
     535            call handle_nf90_err(ncret)
     536
     537            ncret = nf90_def_var(ncid, 'drhodz', NF90_FLOAT, &
     538&                                       dim3dids, ncvarid)
     539            call handle_nf90_err(ncret)
     540            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     541&                                        shuffle=0,     &
     542&                                        deflate=1,     &
     543&                                        deflate_level=DEF_LEVEL)
     544            call handle_nf90_err(ncret)
     545            ncret = nf90_put_var(ncid, ncvarid, &
     546&                                drhodz(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
     547            call handle_nf90_err(ncret)
     548
     549            ncret = nf90_def_var(ncid, 'clouds', NF90_BYTE, &
     550&                                       dim3dids, ncvarid)
     551            call handle_nf90_err(ncret)
     552            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     553&                                        shuffle=0,     &
     554&                                        deflate=1,     &
     555&                                        deflate_level=DEF_LEVEL)
     556            call handle_nf90_err(ncret)
     557            ncret = nf90_put_var(ncid, ncvarid, &
     558&                                clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
     559            call handle_nf90_err(ncret)
     560
     561
     562
     563            ! Note the change in z dimension for the following
     564            dim3dids = (/nxmax_dimid, nymax_dimid, nuvzmax_dimid/)
     565
     566            ncret = nf90_def_var(ncid, 'tth', NF90_FLOAT, &
     567&                                       dim3dids, ncvarid)
     568            call handle_nf90_err(ncret)
     569            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     570&                                        shuffle=0,     &
     571&                                        deflate=1,     &
     572&                                        deflate_level=DEF_LEVEL)
     573            call handle_nf90_err(ncret)
     574            ncret = nf90_put_var(ncid, ncvarid, &
     575&                                tth(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
     576            call handle_nf90_err(ncret)
     577
     578            ncret = nf90_def_var(ncid, 'qvh', NF90_FLOAT, &
     579&                                       dim3dids, ncvarid)
     580            call handle_nf90_err(ncret)
     581            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     582&                                        shuffle=0,     &
     583&                                        deflate=1,     &
     584&                                        deflate_level=DEF_LEVEL)
     585            call handle_nf90_err(ncret)
     586            ncret = nf90_put_var(ncid, ncvarid, &
     587&                                qvh(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
     588            call handle_nf90_err(ncret)
     589
     590            ncret = nf90_def_var(ncid, 'pplev', NF90_FLOAT, &
     591&                                       dim3dids, ncvarid)
     592            call handle_nf90_err(ncret)
     593            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     594&                                        shuffle=0,     &
     595&                                        deflate=1,     &
     596&                                        deflate_level=DEF_LEVEL)
     597            call handle_nf90_err(ncret)
     598            ncret = nf90_put_var(ncid, ncvarid, &
     599&                                pplev(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
     600            call handle_nf90_err(ncret)
     601
     602
     603            dim2dids = (/nxmax_dimid, nymax_dimid/)
     604            ncret = nf90_def_var(ncid, 'cloudsh', NF90_INT, &
     605&                                       dim2dids, ncvarid)
     606            call handle_nf90_err(ncret)
     607            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     608&                                        shuffle=0,     &
     609&                                        deflate=1,     &
     610&                                        deflate_level=DEF_LEVEL)
     611            call handle_nf90_err(ncret)
     612            ncret = nf90_put_var(ncid, ncvarid, &
     613&                                cloudsh(0:nxmax-1, 0:nymax-1, cm_index))
     614            call handle_nf90_err(ncret)
     615
     616
     617
     618!            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     619!&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     620
     621!            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     622!&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     623
     624
     625
     626            ! 2d fields
     627            dim2dids = (/nxmax_dimid, nymax_dimid/)
     628
     629            ncret = nf90_def_var(ncid, 'ps', NF90_FLOAT, &
     630&                                       dim2dids, ncvarid)
     631            call handle_nf90_err(ncret)
     632            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     633&                                        shuffle=0,     &
     634&                                        deflate=1,     &
     635&                                        deflate_level=DEF_LEVEL)
     636            call handle_nf90_err(ncret)
     637            ncret = nf90_put_var(ncid, ncvarid, &
     638&                                ps(0:nxmax-1, 0:nymax-1, 1, cm_index))
     639            call handle_nf90_err(ncret)
     640
     641            ncret = nf90_def_var(ncid, 'sd', NF90_FLOAT, &
     642&                                       dim2dids, ncvarid)
     643            call handle_nf90_err(ncret)
     644            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     645&                                        shuffle=0,     &
     646&                                        deflate=1,     &
     647&                                        deflate_level=DEF_LEVEL)
     648            call handle_nf90_err(ncret)
     649            ncret = nf90_put_var(ncid, ncvarid, &
     650&                                sd(0:nxmax-1, 0:nymax-1, 1, cm_index))
     651            call handle_nf90_err(ncret)
     652
     653            ncret = nf90_def_var(ncid, 'msl', NF90_FLOAT, &
     654&                                       dim2dids, ncvarid)
     655            call handle_nf90_err(ncret)
     656            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     657&                                        shuffle=0,     &
     658&                                        deflate=1,     &
     659&                                        deflate_level=DEF_LEVEL)
     660            call handle_nf90_err(ncret)
     661            ncret = nf90_put_var(ncid, ncvarid, &
     662&                                msl(0:nxmax-1, 0:nymax-1, 1, cm_index))
     663            call handle_nf90_err(ncret)
     664
     665            ncret = nf90_def_var(ncid, 'tcc', NF90_FLOAT, &
     666&                                       dim2dids, ncvarid)
     667            call handle_nf90_err(ncret)
     668            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     669&                                        shuffle=0,     &
     670&                                        deflate=1,     &
     671&                                        deflate_level=DEF_LEVEL)
     672            call handle_nf90_err(ncret)
     673            ncret = nf90_put_var(ncid, ncvarid, &
     674&                                tcc(0:nxmax-1, 0:nymax-1, 1, cm_index))
     675            call handle_nf90_err(ncret)
     676
     677            ncret = nf90_def_var(ncid, 'u10', NF90_FLOAT, &
     678&                                       dim2dids, ncvarid)
     679            call handle_nf90_err(ncret)
     680            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     681&                                        shuffle=0,     &
     682&                                        deflate=1,     &
     683&                                        deflate_level=DEF_LEVEL)
     684            call handle_nf90_err(ncret)
     685            ncret = nf90_put_var(ncid, ncvarid, &
     686&                                u10(0:nxmax-1, 0:nymax-1, 1, cm_index))
     687            call handle_nf90_err(ncret)
     688
     689            ncret = nf90_def_var(ncid, 'v10', NF90_FLOAT, &
     690&                                       dim2dids, ncvarid)
     691            call handle_nf90_err(ncret)
     692            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     693&                                        shuffle=0,     &
     694&                                        deflate=1,     &
     695&                                        deflate_level=DEF_LEVEL)
     696            call handle_nf90_err(ncret)
     697            ncret = nf90_put_var(ncid, ncvarid, &
     698&                                v10(0:nxmax-1, 0:nymax-1, 1, cm_index))
     699            call handle_nf90_err(ncret)
     700
     701            ncret = nf90_def_var(ncid, 'tt2', NF90_FLOAT, &
     702&                                       dim2dids, ncvarid)
     703            call handle_nf90_err(ncret)
     704            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     705&                                        shuffle=0,     &
     706&                                        deflate=1,     &
     707&                                        deflate_level=DEF_LEVEL)
     708            call handle_nf90_err(ncret)
     709            ncret = nf90_put_var(ncid, ncvarid, &
     710&                                tt2(0:nxmax-1, 0:nymax-1, 1, cm_index))
     711            call handle_nf90_err(ncret)
     712
     713            ncret = nf90_def_var(ncid, 'td2', NF90_FLOAT, &
     714&                                       dim2dids, ncvarid)
     715            call handle_nf90_err(ncret)
     716            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     717&                                        shuffle=0,     &
     718&                                        deflate=1,     &
     719&                                        deflate_level=DEF_LEVEL)
     720            call handle_nf90_err(ncret)
     721            ncret = nf90_put_var(ncid, ncvarid, &
     722&                                td2(0:nxmax-1, 0:nymax-1, 1, cm_index))
     723            call handle_nf90_err(ncret)
     724
     725            ncret = nf90_def_var(ncid, 'lsprec', NF90_FLOAT, &
     726&                                       dim2dids, ncvarid)
     727            call handle_nf90_err(ncret)
     728            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     729&                                        shuffle=0,     &
     730&                                        deflate=1,     &
     731&                                        deflate_level=DEF_LEVEL)
     732            call handle_nf90_err(ncret)
     733            ncret = nf90_put_var(ncid, ncvarid, &
     734&                                lsprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
     735            call handle_nf90_err(ncret)
     736
     737            ncret = nf90_def_var(ncid, 'convprec', NF90_FLOAT, &
     738&                                       dim2dids, ncvarid)
     739            call handle_nf90_err(ncret)
     740            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     741&                                        shuffle=0,     &
     742&                                        deflate=1,     &
     743&                                        deflate_level=DEF_LEVEL)
     744            call handle_nf90_err(ncret)
     745            ncret = nf90_put_var(ncid, ncvarid, &
     746&                                convprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
     747            call handle_nf90_err(ncret)
     748
     749            ncret = nf90_def_var(ncid, 'sshf', NF90_FLOAT, &
     750&                                       dim2dids, ncvarid)
     751            call handle_nf90_err(ncret)
     752            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     753&                                        shuffle=0,     &
     754&                                        deflate=1,     &
     755&                                        deflate_level=DEF_LEVEL)
     756            call handle_nf90_err(ncret)
     757            ncret = nf90_put_var(ncid, ncvarid, &
     758&                                sshf(0:nxmax-1, 0:nymax-1, 1, cm_index))
     759            call handle_nf90_err(ncret)
     760
     761            ncret = nf90_def_var(ncid, 'ssr', NF90_FLOAT, &
     762&                                       dim2dids, ncvarid)
     763            call handle_nf90_err(ncret)
     764            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     765&                                        shuffle=0,     &
     766&                                        deflate=1,     &
     767&                                        deflate_level=DEF_LEVEL)
     768            call handle_nf90_err(ncret)
     769            ncret = nf90_put_var(ncid, ncvarid, &
     770&                                ssr(0:nxmax-1, 0:nymax-1, 1, cm_index))
     771            call handle_nf90_err(ncret)
     772
     773            ncret = nf90_def_var(ncid, 'surfstr', NF90_FLOAT, &
     774&                                       dim2dids, ncvarid)
     775            call handle_nf90_err(ncret)
     776            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     777&                                        shuffle=0,     &
     778&                                        deflate=1,     &
     779&                                        deflate_level=DEF_LEVEL)
     780            call handle_nf90_err(ncret)
     781            ncret = nf90_put_var(ncid, ncvarid, &
     782&                                surfstr(0:nxmax-1, 0:nymax-1, 1, cm_index))
     783            call handle_nf90_err(ncret)
     784
     785            ncret = nf90_def_var(ncid, 'ustar', NF90_FLOAT, &
     786&                                       dim2dids, ncvarid)
     787            call handle_nf90_err(ncret)
     788            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     789&                                        shuffle=0,     &
     790&                                        deflate=1,     &
     791&                                        deflate_level=DEF_LEVEL)
     792            call handle_nf90_err(ncret)
     793            ncret = nf90_put_var(ncid, ncvarid, &
     794&                                ustar(0:nxmax-1, 0:nymax-1, 1, cm_index))
     795            call handle_nf90_err(ncret)
     796
     797            ncret = nf90_def_var(ncid, 'wstar', NF90_FLOAT, &
     798&                                       dim2dids, ncvarid)
     799            call handle_nf90_err(ncret)
     800            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     801&                                        shuffle=0,     &
     802&                                        deflate=1,     &
     803&                                        deflate_level=DEF_LEVEL)
     804            call handle_nf90_err(ncret)
     805            ncret = nf90_put_var(ncid, ncvarid, &
     806&                                wstar(0:nxmax-1, 0:nymax-1, 1, cm_index))
     807            call handle_nf90_err(ncret)
     808
     809            ncret = nf90_def_var(ncid, 'hmix', NF90_FLOAT, &
     810&                                       dim2dids, ncvarid)
     811            call handle_nf90_err(ncret)
     812            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     813&                                        shuffle=0,     &
     814&                                        deflate=1,     &
     815&                                        deflate_level=DEF_LEVEL)
     816            call handle_nf90_err(ncret)
     817            ncret = nf90_put_var(ncid, ncvarid, &
     818&                                hmix(0:nxmax-1, 0:nymax-1, 1, cm_index))
     819            call handle_nf90_err(ncret)
     820
     821            ncret = nf90_def_var(ncid, 'tropopause', NF90_FLOAT, &
     822&                                       dim2dids, ncvarid)
     823            call handle_nf90_err(ncret)
     824            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     825&                                        shuffle=0,     &
     826&                                        deflate=1,     &
     827&                                        deflate_level=DEF_LEVEL)
     828            call handle_nf90_err(ncret)
     829            ncret = nf90_put_var(ncid, ncvarid, &
     830&                                tropopause(0:nxmax-1, 0:nymax-1, 1, cm_index))
     831            call handle_nf90_err(ncret)
     832
     833            ncret = nf90_def_var(ncid, 'oli', NF90_FLOAT, &
     834&                                       dim2dids, ncvarid)
     835            call handle_nf90_err(ncret)
     836            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     837&                                        shuffle=0,     &
     838&                                        deflate=1,     &
     839&                                        deflate_level=DEF_LEVEL)
     840            call handle_nf90_err(ncret)
     841            ncret = nf90_put_var(ncid, ncvarid, &
     842&                                oli(0:nxmax-1, 0:nymax-1, 1, cm_index))
     843            call handle_nf90_err(ncret)
     844
     845            ncret = nf90_def_var(ncid, 'diffk', NF90_FLOAT, &
     846&                                       dim2dids, ncvarid)
     847            call handle_nf90_err(ncret)
     848            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     849&                                        shuffle=0,     &
     850&                                        deflate=1,     &
     851&                                        deflate_level=DEF_LEVEL)
     852            call handle_nf90_err(ncret)
     853            ncret = nf90_put_var(ncid, ncvarid, &
     854&                                diffk(0:nxmax-1, 0:nymax-1, 1, cm_index))
     855            call handle_nf90_err(ncret)
     856
     857
     858
     859!           !PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
     860!&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
     861
     862!            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
     863!&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
     864
     865
     866            dim3dids = (/nxmax_dimid, nymax_dimid, maxspec_dimid/)
     867
     868            ncret = nf90_def_var(ncid, 'vdep', NF90_FLOAT, &
     869&                                       dim3dids, ncvarid)
     870            call handle_nf90_err(ncret)
     871            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     872&                                        shuffle=0,     &
     873&                                        deflate=1,     &
     874&                                        deflate_level=DEF_LEVEL)
     875            call handle_nf90_err(ncret)
     876            ncret = nf90_put_var(ncid, ncvarid, &
     877&                                vdep(0:nxmax-1, 0:nymax-1, 1:maxspec, cm_index))
     878            call handle_nf90_err(ncret)
     879
     880
     881
     882            ! 1d fields
     883            dim1dids = (/numclass_dimid/)
     884
     885            ncret = nf90_def_var(ncid, 'z0', NF90_FLOAT, &
     886&                                       dim1dids, ncvarid)
     887            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     888&                                        shuffle=0,     &
     889&                                        deflate=1,     &
     890&                                        deflate_level=DEF_LEVEL)
     891            ncret = nf90_put_var(ncid, ncvarid, &
     892&                                z0(1:numclass))
     893
     894
     895            dim1dids = (/nwzmax_dimid/)
     896
     897            ncret = nf90_def_var(ncid, 'akm', NF90_FLOAT, &
     898&                                       dim1dids, ncvarid)
     899            call handle_nf90_err(ncret)
     900            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     901&                                        shuffle=0,     &
     902&                                        deflate=1,     &
     903&                                        deflate_level=DEF_LEVEL)
     904            call handle_nf90_err(ncret)
     905            ncret = nf90_put_var(ncid, ncvarid, &
     906&                                akm(1:nwzmax))
     907            call handle_nf90_err(ncret)
     908
     909            ncret = nf90_def_var(ncid, 'bkm', NF90_FLOAT, &
     910&                                       dim1dids, ncvarid)
     911            call handle_nf90_err(ncret)
     912            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     913&                                        shuffle=0,     &
     914&                                        deflate=1,     &
     915&                                        deflate_level=DEF_LEVEL)
     916            call handle_nf90_err(ncret)
     917            ncret = nf90_put_var(ncid, ncvarid, &
     918&                                bkm(1:nwzmax))
     919            call handle_nf90_err(ncret)
     920
     921
     922            dim1dids = (/nuvzmax_dimid/)
     923
     924            ncret = nf90_def_var(ncid, 'akz', NF90_FLOAT, &
     925&                                       dim1dids, ncvarid)
     926            call handle_nf90_err(ncret)
     927            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     928&                                        shuffle=0,     &
     929&                                        deflate=1,     &
     930&                                        deflate_level=DEF_LEVEL)
     931            call handle_nf90_err(ncret)
     932            ncret = nf90_put_var(ncid, ncvarid, &
     933&                                akz(1:nuvzmax))
     934            call handle_nf90_err(ncret)
     935
     936            ncret = nf90_def_var(ncid, 'bkz', NF90_FLOAT, &
     937&                                       dim1dids, ncvarid)
     938            call handle_nf90_err(ncret)
     939            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     940&                                        shuffle=0,     &
     941&                                        deflate=1,     &
     942&                                        deflate_level=DEF_LEVEL)
     943            call handle_nf90_err(ncret)
     944            ncret = nf90_put_var(ncid, ncvarid, &
     945&                                bkz(1:nuvzmax))
     946            call handle_nf90_err(ncret)
     947
     948
     949            dim1dids = (/nzmax_dimid/)
     950
     951            ncret = nf90_def_var(ncid, 'aknew', NF90_FLOAT, &
     952&                                       dim1dids, ncvarid)
     953            call handle_nf90_err(ncret)
     954            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     955&                                        shuffle=0,     &
     956&                                        deflate=1,     &
     957&                                        deflate_level=DEF_LEVEL)
     958            call handle_nf90_err(ncret)
     959            ncret = nf90_put_var(ncid, ncvarid, &
     960&                                aknew(1:nzmax))
     961            call handle_nf90_err(ncret)
     962
     963            ncret = nf90_def_var(ncid, 'bknew', NF90_FLOAT, &
     964&                                       dim1dids, ncvarid)
     965            call handle_nf90_err(ncret)
     966            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     967&                                        shuffle=0,     &
     968&                                        deflate=1,     &
     969&                                        deflate_level=DEF_LEVEL)
     970            call handle_nf90_err(ncret)
     971            ncret = nf90_put_var(ncid, ncvarid, &
     972&                                bknew(1:nzmax))
     973            call handle_nf90_err(ncret)
     974
     975
     976!            PRINT *, 'SUM(bknew(1:nzmax)): ', &
     977!&                                        SUM(bknew(1:nzmax))
     978
     979
     980
     981            ! Getting ready to add in nested code
     982
     983            ! These are compiled max dimensions from par_mod - these are
     984            ! not meant to be reassigned during a LOAD, but used as "header"
     985            ! information to provide the structure of arrays
     986            ncret = nf90_def_dim(ncid, 'maxnests', maxnests, maxnests_dimid)
     987            call handle_nf90_err(ncret)
     988            ncret = nf90_def_dim(ncid, 'nxmaxn', nxmaxn, nxmaxn_dimid)
     989            call handle_nf90_err(ncret)
     990            ncret = nf90_def_dim(ncid, 'nymaxn', nymaxn, nymaxn_dimid)
     991            call handle_nf90_err(ncret)
     992
     993
     994            ! Nested, scalar values (for each nest)
     995            dim1dids = (/maxnests_dimid/)
     996
     997            ncret = nf90_def_var(ncid, 'nxn', NF90_INT, &
     998&                                       dim1dids, ncvarid)
     999            call handle_nf90_err(ncret)
     1000            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1001&                                        shuffle=0,     &
     1002&                                        deflate=1,     &
     1003&                                        deflate_level=DEF_LEVEL)
     1004            call handle_nf90_err(ncret)
     1005            ncret = nf90_put_var(ncid, ncvarid, &
     1006&                                nxn(1:maxnests))
     1007            call handle_nf90_err(ncret)
     1008
     1009            ncret = nf90_def_var(ncid, 'nyn', NF90_INT, &
     1010&                                       dim1dids, ncvarid)
     1011            call handle_nf90_err(ncret)
     1012            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1013&                                        shuffle=0,     &
     1014&                                        deflate=1,     &
     1015&                                        deflate_level=DEF_LEVEL)
     1016            call handle_nf90_err(ncret)
     1017            ncret = nf90_put_var(ncid, ncvarid, &
     1018&                                nyn(1:maxnests))
     1019            call handle_nf90_err(ncret)
     1020
     1021            ncret = nf90_def_var(ncid, 'dxn', NF90_FLOAT, &
     1022&                                       dim1dids, ncvarid)
     1023            call handle_nf90_err(ncret)
     1024            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1025&                                        shuffle=0,     &
     1026&                                        deflate=1,     &
     1027&                                        deflate_level=DEF_LEVEL)
     1028            call handle_nf90_err(ncret)
     1029            ncret = nf90_put_var(ncid, ncvarid, &
     1030&                                dxn(1:maxnests))
     1031            call handle_nf90_err(ncret)
     1032
     1033            ncret = nf90_def_var(ncid, 'dyn', NF90_FLOAT, &
     1034&                                       dim1dids, ncvarid)
     1035            call handle_nf90_err(ncret)
     1036            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1037&                                        shuffle=0,     &
     1038&                                        deflate=1,     &
     1039&                                        deflate_level=DEF_LEVEL)
     1040            call handle_nf90_err(ncret)
     1041            ncret = nf90_put_var(ncid, ncvarid, &
     1042&                                dyn(1:maxnests))
     1043            call handle_nf90_err(ncret)
     1044
     1045            ncret = nf90_def_var(ncid, 'xlon0n', NF90_FLOAT, &
     1046&                                       dim1dids, ncvarid)
     1047            call handle_nf90_err(ncret)
     1048            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1049&                                        shuffle=0,     &
     1050&                                        deflate=1,     &
     1051&                                        deflate_level=DEF_LEVEL)
     1052            call handle_nf90_err(ncret)
     1053            ncret = nf90_put_var(ncid, ncvarid, &
     1054&                                xlon0n(1:maxnests))
     1055            call handle_nf90_err(ncret)
     1056
     1057            ncret = nf90_def_var(ncid, 'ylat0n', NF90_FLOAT, &
     1058&                                       dim1dids, ncvarid)
     1059            call handle_nf90_err(ncret)
     1060            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1061&                                        shuffle=0,     &
     1062&                                        deflate=1,     &
     1063&                                        deflate_level=DEF_LEVEL)
     1064            call handle_nf90_err(ncret)
     1065            ncret = nf90_put_var(ncid, ncvarid, &
     1066&                                ylat0n(1:maxnests))
     1067            call handle_nf90_err(ncret)
     1068
     1069
     1070
     1071
     1072            ! Nested fields, static over time
     1073            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
     1074
     1075            ncret = nf90_def_var(ncid, 'oron', NF90_FLOAT, &
     1076&                                       dim3dids, ncvarid)
     1077            call handle_nf90_err(ncret)
     1078            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1079&                                        shuffle=0,     &
     1080&                                        deflate=1,     &
     1081&                                        deflate_level=DEF_LEVEL)
     1082            call handle_nf90_err(ncret)
     1083            ncret = nf90_put_var(ncid, ncvarid, &
     1084&                                oron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
     1085            call handle_nf90_err(ncret)
     1086
     1087            ncret = nf90_def_var(ncid, 'excessoron', NF90_FLOAT, &
     1088&                                       dim3dids, ncvarid)
     1089            call handle_nf90_err(ncret)
     1090            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1091&                                        shuffle=0,     &
     1092&                                        deflate=1,     &
     1093&                                        deflate_level=DEF_LEVEL)
     1094            call handle_nf90_err(ncret)
     1095            ncret = nf90_put_var(ncid, ncvarid, &
     1096&                                excessoron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
     1097            call handle_nf90_err(ncret)
     1098
     1099            ncret = nf90_def_var(ncid, 'lsmn', NF90_FLOAT, &
     1100&                                       dim3dids, ncvarid)
     1101            call handle_nf90_err(ncret)
     1102            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1103&                                        shuffle=0,     &
     1104&                                        deflate=1,     &
     1105&                                        deflate_level=DEF_LEVEL)
     1106            call handle_nf90_err(ncret)
     1107            ncret = nf90_put_var(ncid, ncvarid, &
     1108&                                lsmn(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
     1109            call handle_nf90_err(ncret)
     1110
     1111            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, numclass_dimid, maxnests_dimid/)
     1112
     1113            ncret = nf90_def_var(ncid, 'xlandusen', NF90_FLOAT, &
     1114&                                       dim4dids, ncvarid)
     1115            call handle_nf90_err(ncret)
     1116            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1117&                                        shuffle=0,     &
     1118&                                        deflate=1,     &
     1119&                                        deflate_level=DEF_LEVEL)
     1120            call handle_nf90_err(ncret)
     1121            ncret = nf90_put_var(ncid, ncvarid, &
     1122&                                xlandusen(0:nxmaxn-1, 0:nymaxn-1, 1:numclass, 1:maxnests))
     1123            call handle_nf90_err(ncret)
     1124
     1125!            PRINT *, 'SUM(oron): ', SUM(oron)
     1126
     1127
     1128
     1129            ! 3d nested fields
     1130            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nzmax_dimid, maxnests_dimid/)
     1131
     1132            ncret = nf90_def_var(ncid, 'uun', NF90_FLOAT, &
     1133&                                       dim4dids, ncvarid)
     1134            call handle_nf90_err(ncret)
     1135            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1136&                                        shuffle=0,     &
     1137&                                        deflate=1,     &
     1138&                                        deflate_level=DEF_LEVEL)
     1139            call handle_nf90_err(ncret)
     1140            ncret = nf90_put_var(ncid, ncvarid, &
     1141&                                uun(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
     1142            call handle_nf90_err(ncret)
     1143
     1144            ncret = nf90_def_var(ncid, 'vvn', NF90_FLOAT, &
     1145&                                       dim4dids, ncvarid)
     1146            call handle_nf90_err(ncret)
     1147            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1148&                                        shuffle=0,     &
     1149&                                        deflate=1,     &
     1150&                                        deflate_level=DEF_LEVEL)
     1151            call handle_nf90_err(ncret)
     1152            ncret = nf90_put_var(ncid, ncvarid, &
     1153&                                vvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
     1154            call handle_nf90_err(ncret)
     1155
     1156            ncret = nf90_def_var(ncid, 'wwn', NF90_FLOAT, &
     1157&                                       dim4dids, ncvarid)
     1158            call handle_nf90_err(ncret)
     1159            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1160&                                        shuffle=0,     &
     1161&                                        deflate=1,     &
     1162&                                        deflate_level=DEF_LEVEL)
     1163            call handle_nf90_err(ncret)
     1164            ncret = nf90_put_var(ncid, ncvarid, &
     1165&                                wwn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
     1166            call handle_nf90_err(ncret)
     1167
     1168            ncret = nf90_def_var(ncid, 'ttn', NF90_FLOAT, &
     1169&                                       dim4dids, ncvarid)
     1170            call handle_nf90_err(ncret)
     1171            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1172&                                        shuffle=0,     &
     1173&                                        deflate=1,     &
     1174&                                        deflate_level=DEF_LEVEL)
     1175            call handle_nf90_err(ncret)
     1176            ncret = nf90_put_var(ncid, ncvarid, &
     1177&                                ttn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
     1178            call handle_nf90_err(ncret)
     1179
     1180            ncret = nf90_def_var(ncid, 'qvn', NF90_FLOAT, &
     1181&                                       dim4dids, ncvarid)
     1182            call handle_nf90_err(ncret)
     1183            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1184&                                        shuffle=0,     &
     1185&                                        deflate=1,     &
     1186&                                        deflate_level=DEF_LEVEL)
     1187            call handle_nf90_err(ncret)
     1188            ncret = nf90_put_var(ncid, ncvarid, &
     1189&                                qvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
     1190            call handle_nf90_err(ncret)
     1191
     1192            ncret = nf90_def_var(ncid, 'pvn', NF90_FLOAT, &
     1193&                                       dim4dids, ncvarid)
     1194            call handle_nf90_err(ncret)
     1195            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1196&                                        shuffle=0,     &
     1197&                                        deflate=1,     &
     1198&                                        deflate_level=DEF_LEVEL)
     1199            call handle_nf90_err(ncret)
     1200            ncret = nf90_put_var(ncid, ncvarid, &
     1201&                                pvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
     1202            call handle_nf90_err(ncret)
     1203
     1204            ncret = nf90_def_var(ncid, 'rhon', NF90_FLOAT, &
     1205&                                       dim4dids, ncvarid)
     1206            call handle_nf90_err(ncret)
     1207            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1208&                                        shuffle=0,     &
     1209&                                        deflate=1,     &
     1210&                                        deflate_level=DEF_LEVEL)
     1211            call handle_nf90_err(ncret)
     1212            ncret = nf90_put_var(ncid, ncvarid, &
     1213&                                rhon(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
     1214            call handle_nf90_err(ncret)
     1215
     1216            ncret = nf90_def_var(ncid, 'drhodzn', NF90_FLOAT, &
     1217&                                       dim4dids, ncvarid)
     1218            call handle_nf90_err(ncret)
     1219            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1220&                                        shuffle=0,     &
     1221&                                        deflate=1,     &
     1222&                                        deflate_level=DEF_LEVEL)
     1223            call handle_nf90_err(ncret)
     1224            ncret = nf90_put_var(ncid, ncvarid, &
     1225&                                drhodzn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
     1226            call handle_nf90_err(ncret)
     1227
     1228
     1229            ! Note the new dimensions
     1230            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nuvzmax_dimid, maxnests_dimid/)
     1231
     1232            ncret = nf90_def_var(ncid, 'tthn', NF90_FLOAT, &
     1233&                                       dim4dids, ncvarid)
     1234            call handle_nf90_err(ncret)
     1235            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1236&                                        shuffle=0,     &
     1237&                                        deflate=1,     &
     1238&                                        deflate_level=DEF_LEVEL)
     1239            call handle_nf90_err(ncret)
     1240            ncret = nf90_put_var(ncid, ncvarid, &
     1241&                                tthn(0:nxmaxn-1, 0:nymaxn-1, 1:nuvzmax, cm_index, 1:maxnests))
     1242            call handle_nf90_err(ncret)
     1243
     1244            ncret = nf90_def_var(ncid, 'qvhn', NF90_FLOAT, &
     1245&                                       dim4dids, ncvarid)
     1246            call handle_nf90_err(ncret)
     1247            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1248&                                        shuffle=0,     &
     1249&                                        deflate=1,     &
     1250&                                        deflate_level=DEF_LEVEL)
     1251            call handle_nf90_err(ncret)
     1252            ncret = nf90_put_var(ncid, ncvarid, &
     1253&                                qvhn(0:nxmaxn-1, 0:nymaxn-1, 1:nuvzmax, cm_index, 1:maxnests))
     1254            call handle_nf90_err(ncret)
     1255
     1256            ! Note the new dimensions
     1257            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, zero_to_nzmax_dimid, maxnests_dimid/)
     1258
     1259            ncret = nf90_def_var(ncid, 'cloudsn', NF90_INT, &
     1260&                                       dim4dids, ncvarid)
     1261            call handle_nf90_err(ncret)
     1262            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1263&                                        shuffle=0,     &
     1264&                                        deflate=1,     &
     1265&                                        deflate_level=DEF_LEVEL)
     1266            call handle_nf90_err(ncret)
     1267            ncret = nf90_put_var(ncid, ncvarid, &
     1268&                                cloudsn(0:nxmaxn-1, 0:nymaxn-1, 0:nzmax, cm_index, 1:maxnests))
     1269            call handle_nf90_err(ncret)
     1270
     1271            ! Note the new dimensions
     1272            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
     1273
     1274            ncret = nf90_def_var(ncid, 'cloudsnh', NF90_INT, &
     1275&                                       dim3dids, ncvarid)
     1276            call handle_nf90_err(ncret)
     1277            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1278&                                        shuffle=0,     &
     1279&                                        deflate=1,     &
     1280&                                        deflate_level=DEF_LEVEL)
     1281            call handle_nf90_err(ncret)
     1282            ncret = nf90_put_var(ncid, ncvarid, &
     1283&                                cloudsnh(0:nxmaxn-1, 0:nymaxn-1, cm_index, 1:maxnests))
     1284            call handle_nf90_err(ncret)
     1285
     1286
     1287!            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
     1288!            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
     1289!            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
     1290
     1291
     1292
     1293            ! 2d nested fields
     1294            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
     1295
     1296            ncret = nf90_def_var(ncid, 'psn', NF90_FLOAT, &
     1297&                                       dim3dids, ncvarid)
     1298            call handle_nf90_err(ncret)
     1299            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1300&                                        shuffle=0,     &
     1301&                                        deflate=1,     &
     1302&                                        deflate_level=DEF_LEVEL)
     1303            call handle_nf90_err(ncret)
     1304            ncret = nf90_put_var(ncid, ncvarid, &
     1305&                                psn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1306            call handle_nf90_err(ncret)
     1307
     1308            ncret = nf90_def_var(ncid, 'sdn', NF90_FLOAT, &
     1309&                                       dim3dids, ncvarid)
     1310            call handle_nf90_err(ncret)
     1311            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1312&                                        shuffle=0,     &
     1313&                                        deflate=1,     &
     1314&                                        deflate_level=DEF_LEVEL)
     1315            call handle_nf90_err(ncret)
     1316            ncret = nf90_put_var(ncid, ncvarid, &
     1317&                                sdn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1318            call handle_nf90_err(ncret)
     1319
     1320            ncret = nf90_def_var(ncid, 'msln', NF90_FLOAT, &
     1321&                                       dim3dids, ncvarid)
     1322            call handle_nf90_err(ncret)
     1323            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1324&                                        shuffle=0,     &
     1325&                                        deflate=1,     &
     1326&                                        deflate_level=DEF_LEVEL)
     1327            call handle_nf90_err(ncret)
     1328            ncret = nf90_put_var(ncid, ncvarid, &
     1329&                                msln(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1330            call handle_nf90_err(ncret)
     1331
     1332            ncret = nf90_def_var(ncid, 'tccn', NF90_FLOAT, &
     1333&                                       dim3dids, ncvarid)
     1334            call handle_nf90_err(ncret)
     1335            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1336&                                        shuffle=0,     &
     1337&                                        deflate=1,     &
     1338&                                        deflate_level=DEF_LEVEL)
     1339            call handle_nf90_err(ncret)
     1340            ncret = nf90_put_var(ncid, ncvarid, &
     1341&                                tccn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1342            call handle_nf90_err(ncret)
     1343
     1344            ncret = nf90_def_var(ncid, 'u10n', NF90_FLOAT, &
     1345&                                       dim3dids, ncvarid)
     1346            call handle_nf90_err(ncret)
     1347            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1348&                                        shuffle=0,     &
     1349&                                        deflate=1,     &
     1350&                                        deflate_level=DEF_LEVEL)
     1351            call handle_nf90_err(ncret)
     1352            ncret = nf90_put_var(ncid, ncvarid, &
     1353&                                u10n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1354            call handle_nf90_err(ncret)
     1355
     1356            ncret = nf90_def_var(ncid, 'v10n', NF90_FLOAT, &
     1357&                                       dim3dids, ncvarid)
     1358            call handle_nf90_err(ncret)
     1359            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1360&                                        shuffle=0,     &
     1361&                                        deflate=1,     &
     1362&                                        deflate_level=DEF_LEVEL)
     1363            call handle_nf90_err(ncret)
     1364            ncret = nf90_put_var(ncid, ncvarid, &
     1365&                                v10n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1366            call handle_nf90_err(ncret)
     1367
     1368            ncret = nf90_def_var(ncid, 'tt2n', NF90_FLOAT, &
     1369&                                       dim3dids, ncvarid)
     1370            call handle_nf90_err(ncret)
     1371            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1372&                                        shuffle=0,     &
     1373&                                        deflate=1,     &
     1374&                                        deflate_level=DEF_LEVEL)
     1375            call handle_nf90_err(ncret)
     1376            ncret = nf90_put_var(ncid, ncvarid, &
     1377&                                tt2n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1378            call handle_nf90_err(ncret)
     1379
     1380            ncret = nf90_def_var(ncid, 'td2n', NF90_FLOAT, &
     1381&                                       dim3dids, ncvarid)
     1382            call handle_nf90_err(ncret)
     1383            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1384&                                        shuffle=0,     &
     1385&                                        deflate=1,     &
     1386&                                        deflate_level=DEF_LEVEL)
     1387            call handle_nf90_err(ncret)
     1388            ncret = nf90_put_var(ncid, ncvarid, &
     1389&                                td2n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1390            call handle_nf90_err(ncret)
     1391
     1392            ncret = nf90_def_var(ncid, 'lsprecn', NF90_FLOAT, &
     1393&                                       dim3dids, ncvarid)
     1394            call handle_nf90_err(ncret)
     1395            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1396&                                        shuffle=0,     &
     1397&                                        deflate=1,     &
     1398&                                        deflate_level=DEF_LEVEL)
     1399            call handle_nf90_err(ncret)
     1400            ncret = nf90_put_var(ncid, ncvarid, &
     1401&                                lsprecn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1402            call handle_nf90_err(ncret)
     1403
     1404            ncret = nf90_def_var(ncid, 'convprecn', NF90_FLOAT, &
     1405&                                       dim3dids, ncvarid)
     1406            call handle_nf90_err(ncret)
     1407            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1408&                                        shuffle=0,     &
     1409&                                        deflate=1,     &
     1410&                                        deflate_level=DEF_LEVEL)
     1411            call handle_nf90_err(ncret)
     1412            ncret = nf90_put_var(ncid, ncvarid, &
     1413&                                convprecn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1414            call handle_nf90_err(ncret)
     1415
     1416            ncret = nf90_def_var(ncid, 'sshfn', NF90_FLOAT, &
     1417&                                       dim3dids, ncvarid)
     1418            call handle_nf90_err(ncret)
     1419            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1420&                                        shuffle=0,     &
     1421&                                        deflate=1,     &
     1422&                                        deflate_level=DEF_LEVEL)
     1423            call handle_nf90_err(ncret)
     1424            ncret = nf90_put_var(ncid, ncvarid, &
     1425&                                sshfn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1426            call handle_nf90_err(ncret)
     1427
     1428            ncret = nf90_def_var(ncid, 'ssrn', NF90_FLOAT, &
     1429&                                       dim3dids, ncvarid)
     1430            call handle_nf90_err(ncret)
     1431            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1432&                                        shuffle=0,     &
     1433&                                        deflate=1,     &
     1434&                                        deflate_level=DEF_LEVEL)
     1435            call handle_nf90_err(ncret)
     1436            ncret = nf90_put_var(ncid, ncvarid, &
     1437&                                ssrn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1438            call handle_nf90_err(ncret)
     1439
     1440            ncret = nf90_def_var(ncid, 'surfstrn', NF90_FLOAT, &
     1441&                                       dim3dids, ncvarid)
     1442            call handle_nf90_err(ncret)
     1443            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1444&                                        shuffle=0,     &
     1445&                                        deflate=1,     &
     1446&                                        deflate_level=DEF_LEVEL)
     1447            call handle_nf90_err(ncret)
     1448            ncret = nf90_put_var(ncid, ncvarid, &
     1449&                                surfstrn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1450            call handle_nf90_err(ncret)
     1451
     1452            ncret = nf90_def_var(ncid, 'ustarn', NF90_FLOAT, &
     1453&                                       dim3dids, ncvarid)
     1454            call handle_nf90_err(ncret)
     1455            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1456&                                        shuffle=0,     &
     1457&                                        deflate=1,     &
     1458&                                        deflate_level=DEF_LEVEL)
     1459            call handle_nf90_err(ncret)
     1460            ncret = nf90_put_var(ncid, ncvarid, &
     1461&                                ustarn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1462            call handle_nf90_err(ncret)
     1463
     1464            ncret = nf90_def_var(ncid, 'wstarn', NF90_FLOAT, &
     1465&                                       dim3dids, ncvarid)
     1466            call handle_nf90_err(ncret)
     1467            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1468&                                        shuffle=0,     &
     1469&                                        deflate=1,     &
     1470&                                        deflate_level=DEF_LEVEL)
     1471            call handle_nf90_err(ncret)
     1472            ncret = nf90_put_var(ncid, ncvarid, &
     1473&                                wstarn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1474            call handle_nf90_err(ncret)
     1475
     1476            ncret = nf90_def_var(ncid, 'hmixn', NF90_FLOAT, &
     1477&                                       dim3dids, ncvarid)
     1478            call handle_nf90_err(ncret)
     1479            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1480&                                        shuffle=0,     &
     1481&                                        deflate=1,     &
     1482&                                        deflate_level=DEF_LEVEL)
     1483            call handle_nf90_err(ncret)
     1484            ncret = nf90_put_var(ncid, ncvarid, &
     1485&                                hmixn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1486            call handle_nf90_err(ncret)
     1487
     1488            ncret = nf90_def_var(ncid, 'tropopausen', NF90_FLOAT, &
     1489&                                       dim3dids, ncvarid)
     1490            call handle_nf90_err(ncret)
     1491            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1492&                                        shuffle=0,     &
     1493&                                        deflate=1,     &
     1494&                                        deflate_level=DEF_LEVEL)
     1495            call handle_nf90_err(ncret)
     1496            ncret = nf90_put_var(ncid, ncvarid, &
     1497&                                tropopausen(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1498            call handle_nf90_err(ncret)
     1499
     1500            ncret = nf90_def_var(ncid, 'olin', NF90_FLOAT, &
     1501&                                       dim3dids, ncvarid)
     1502            call handle_nf90_err(ncret)
     1503            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1504&                                        shuffle=0,     &
     1505&                                        deflate=1,     &
     1506&                                        deflate_level=DEF_LEVEL)
     1507            call handle_nf90_err(ncret)
     1508            ncret = nf90_put_var(ncid, ncvarid, &
     1509&                                olin(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1510            call handle_nf90_err(ncret)
     1511
     1512            ncret = nf90_def_var(ncid, 'diffkn', NF90_FLOAT, &
     1513&                                       dim3dids, ncvarid)
     1514            call handle_nf90_err(ncret)
     1515            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1516&                                        shuffle=0,     &
     1517&                                        deflate=1,     &
     1518&                                        deflate_level=DEF_LEVEL)
     1519            call handle_nf90_err(ncret)
     1520            ncret = nf90_put_var(ncid, ncvarid, &
     1521&                                diffkn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
     1522            call handle_nf90_err(ncret)
     1523
     1524            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, maxspec_dimid, maxnests_dimid/)
     1525
     1526
     1527
     1528            ncret = nf90_def_var(ncid, 'vdepn', NF90_FLOAT, &
     1529&                                       dim4dids, ncvarid)
     1530            call handle_nf90_err(ncret)
     1531            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1532&                                        shuffle=0,     &
     1533&                                        deflate=1,     &
     1534&                                        deflate_level=DEF_LEVEL)
     1535            call handle_nf90_err(ncret)
     1536            ncret = nf90_put_var(ncid, ncvarid, &
     1537&                                vdepn(0:nxmaxn-1, 0:nymaxn-1, 1:maxspec, cm_index, 1:maxnests))
     1538            call handle_nf90_err(ncret)
     1539
     1540
     1541!            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
     1542!            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
     1543!            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
     1544
     1545
     1546
     1547            ! Auxiliary variables for nests
     1548            dim1dids = (/zero_to_maxnests_dimid/)
     1549
     1550            ncret = nf90_def_var(ncid, 'xresoln', NF90_FLOAT, &
     1551&                                       dim1dids, ncvarid)
     1552            call handle_nf90_err(ncret)
     1553            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1554&                                        shuffle=0,     &
     1555&                                        deflate=1,     &
     1556&                                        deflate_level=DEF_LEVEL)
     1557            call handle_nf90_err(ncret)
     1558            ncret = nf90_put_var(ncid, ncvarid, &
     1559&                                xresoln(0:maxnests))
     1560            call handle_nf90_err(ncret)
     1561
     1562            ncret = nf90_def_var(ncid, 'yresoln', NF90_FLOAT, &
     1563&                                       dim1dids, ncvarid)
     1564            call handle_nf90_err(ncret)
     1565            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1566&                                        shuffle=0,     &
     1567&                                        deflate=1,     &
     1568&                                        deflate_level=DEF_LEVEL)
     1569            call handle_nf90_err(ncret)
     1570            ncret = nf90_put_var(ncid, ncvarid, &
     1571&                                yresoln(0:maxnests))
     1572            call handle_nf90_err(ncret)
     1573
     1574            dim1dids = (/maxnests_dimid/)
     1575
     1576            ncret = nf90_def_var(ncid, 'xln', NF90_FLOAT, &
     1577&                                       dim1dids, ncvarid)
     1578            call handle_nf90_err(ncret)
     1579            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1580&                                        shuffle=0,     &
     1581&                                        deflate=1,     &
     1582&                                        deflate_level=DEF_LEVEL)
     1583            call handle_nf90_err(ncret)
     1584            ncret = nf90_put_var(ncid, ncvarid, &
     1585&                                xln(1:maxnests))
     1586            call handle_nf90_err(ncret)
     1587
     1588            ncret = nf90_def_var(ncid, 'yln', NF90_FLOAT, &
     1589&                                       dim1dids, ncvarid)
     1590            call handle_nf90_err(ncret)
     1591            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1592&                                        shuffle=0,     &
     1593&                                        deflate=1,     &
     1594&                                        deflate_level=DEF_LEVEL)
     1595            call handle_nf90_err(ncret)
     1596            ncret = nf90_put_var(ncid, ncvarid, &
     1597&                                yln(1:maxnests))
     1598            call handle_nf90_err(ncret)
     1599
     1600            ncret = nf90_def_var(ncid, 'xrn', NF90_FLOAT, &
     1601&                                       dim1dids, ncvarid)
     1602            call handle_nf90_err(ncret)
     1603            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1604&                                        shuffle=0,     &
     1605&                                        deflate=1,     &
     1606&                                        deflate_level=DEF_LEVEL)
     1607            call handle_nf90_err(ncret)
     1608            ncret = nf90_put_var(ncid, ncvarid, &
     1609&                                xrn(1:maxnests))
     1610            call handle_nf90_err(ncret)
     1611
     1612            ncret = nf90_def_var(ncid, 'yrn', NF90_FLOAT, &
     1613&                                       dim1dids, ncvarid)
     1614            call handle_nf90_err(ncret)
     1615            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1616&                                        shuffle=0,     &
     1617&                                        deflate=1,     &
     1618&                                        deflate_level=DEF_LEVEL)
     1619            call handle_nf90_err(ncret)
     1620            ncret = nf90_put_var(ncid, ncvarid, &
     1621&                                yrn(1:maxnests))
     1622            call handle_nf90_err(ncret)
     1623
     1624!            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
     1625!            PRINT *, 'SUM(xrn): ', SUM(xrn)
     1626
     1627
     1628
     1629            ! Variables for polar stereographic projection
     1630            dim1dids = (/polemap_dimid/)
     1631
     1632            ncret = nf90_def_var(ncid, 'southpolemap', NF90_FLOAT, &
     1633&                                       dim1dids, ncvarid)
     1634            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1635&                                        shuffle=0,     &
     1636&                                        deflate=1,     &
     1637&                                        deflate_level=DEF_LEVEL)
     1638            ncret = nf90_put_var(ncid, ncvarid, &
     1639&                                southpolemap(:))
     1640
     1641            ncret = nf90_def_var(ncid, 'northpolemap', NF90_FLOAT, &
     1642&                                       dim1dids, ncvarid)
     1643            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1644&                                        shuffle=0,     &
     1645&                                        deflate=1,     &
     1646&                                        deflate_level=DEF_LEVEL)
     1647            ncret = nf90_put_var(ncid, ncvarid, &
     1648&                                northpolemap(:))
     1649
     1650
     1651
     1652            ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
     1653            ! to INTEGER for NetCDF storage
     1654            ncret = nf90_def_var(ncid, 'xglobal', NF90_INT, ncvarid)
     1655            call handle_nf90_err(ncret)
     1656            ncret = nf90_put_var(ncid, ncvarid, logical2integer(xglobal))
     1657            call handle_nf90_err(ncret)
     1658
     1659            ncret = nf90_def_var(ncid, 'sglobal', NF90_INT, ncvarid)
     1660            call handle_nf90_err(ncret)
     1661            ncret = nf90_put_var(ncid, ncvarid, logical2integer(sglobal))
     1662            call handle_nf90_err(ncret)
     1663
     1664            ncret = nf90_def_var(ncid, 'nglobal', NF90_INT, ncvarid)
     1665            call handle_nf90_err(ncret)
     1666            ncret = nf90_put_var(ncid, ncvarid, logical2integer(nglobal))
     1667            call handle_nf90_err(ncret)
     1668
     1669            ncret = nf90_def_var(ncid, 'switchnorthg', NF90_FLOAT, ncvarid)
     1670            call handle_nf90_err(ncret)
     1671            ncret = nf90_put_var(ncid, ncvarid, switchnorthg)
     1672            call handle_nf90_err(ncret)
     1673
     1674            ncret = nf90_def_var(ncid, 'switchsouthg', NF90_FLOAT, ncvarid)
     1675            call handle_nf90_err(ncret)
     1676            ncret = nf90_put_var(ncid, ncvarid, switchsouthg)
     1677            call handle_nf90_err(ncret)
     1678
     1679
     1680
     1681!            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
     1682!            PRINT *, 'xglobal: ', xglobal
     1683!            PRINT *, 'sglobal: ', sglobal
     1684!            PRINT *, 'nglobal: ', nglobal
     1685!            PRINT *, 'switchsouthg: ', switchsouthg
     1686
     1687            ! Variables declared in conv_mod (convection)
     1688            dim1dids = (/nconvlevmax_dimid/)
     1689
     1690            ncret = nf90_def_var(ncid, 'pconv', NF90_FLOAT, &
     1691&                                       dim1dids, ncvarid)
     1692            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1693&                                        shuffle=0,     &
     1694&                                        deflate=1,     &
     1695&                                        deflate_level=DEF_LEVEL)
     1696            ncret = nf90_put_var(ncid, ncvarid, &
     1697&                                pconv(:))
     1698
     1699            ncret = nf90_def_var(ncid, 'dpr', NF90_FLOAT, &
     1700&                                       dim1dids, ncvarid)
     1701            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1702&                                        shuffle=0,     &
     1703&                                        deflate=1,     &
     1704&                                        deflate_level=DEF_LEVEL)
     1705            ncret = nf90_put_var(ncid, ncvarid, &
     1706&                                dpr(:))
     1707
     1708            ncret = nf90_def_var(ncid, 'pconv_hpa', NF90_FLOAT, &
     1709&                                       dim1dids, ncvarid)
     1710            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1711&                                        shuffle=0,     &
     1712&                                        deflate=1,     &
     1713&                                        deflate_level=DEF_LEVEL)
     1714            ncret = nf90_put_var(ncid, ncvarid, &
     1715&                                pconv_hpa(:))
     1716
     1717            ncret = nf90_def_var(ncid, 'ft', NF90_FLOAT, &
     1718&                                       dim1dids, ncvarid)
     1719            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1720&                                        shuffle=0,     &
     1721&                                        deflate=1,     &
     1722&                                        deflate_level=DEF_LEVEL)
     1723            ncret = nf90_put_var(ncid, ncvarid, &
     1724&                                ft(:))
     1725
     1726            ncret = nf90_def_var(ncid, 'fq', NF90_FLOAT, &
     1727&                                       dim1dids, ncvarid)
     1728            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1729&                                        shuffle=0,     &
     1730&                                        deflate=1,     &
     1731&                                        deflate_level=DEF_LEVEL)
     1732            ncret = nf90_put_var(ncid, ncvarid, &
     1733&                                fq(:))
     1734
     1735            ncret = nf90_def_var(ncid, 'sub', NF90_FLOAT, &
     1736&                                       dim1dids, ncvarid)
     1737            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1738&                                        shuffle=0,     &
     1739&                                        deflate=1,     &
     1740&                                        deflate_level=DEF_LEVEL)
     1741            ncret = nf90_put_var(ncid, ncvarid, &
     1742&                                sub(:))
     1743
     1744            dim1dids = (/na_dimid/)
     1745
     1746            ncret = nf90_def_var(ncid, 'phconv', NF90_FLOAT, &
     1747&                                       dim1dids, ncvarid)
     1748            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1749&                                        shuffle=0,     &
     1750&                                        deflate=1,     &
     1751&                                        deflate_level=DEF_LEVEL)
     1752            ncret = nf90_put_var(ncid, ncvarid, &
     1753&                                phconv(:))
     1754
     1755            ncret = nf90_def_var(ncid, 'phconv_hpa', NF90_FLOAT, &
     1756&                                       dim1dids, ncvarid)
     1757            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1758&                                        shuffle=0,     &
     1759&                                        deflate=1,     &
     1760&                                        deflate_level=DEF_LEVEL)
     1761            ncret = nf90_put_var(ncid, ncvarid, &
     1762&                                phconv_hpa(:))
     1763
     1764            ncret = nf90_def_var(ncid, 'tconv', NF90_FLOAT, &
     1765&                                       dim1dids, ncvarid)
     1766            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1767&                                        shuffle=0,     &
     1768&                                        deflate=1,     &
     1769&                                        deflate_level=DEF_LEVEL)
     1770            ncret = nf90_put_var(ncid, ncvarid, &
     1771&                                tconv(:))
     1772
     1773            ncret = nf90_def_var(ncid, 'qconv', NF90_FLOAT, &
     1774&                                       dim1dids, ncvarid)
     1775            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1776&                                        shuffle=0,     &
     1777&                                        deflate=1,     &
     1778&                                        deflate_level=DEF_LEVEL)
     1779            ncret = nf90_put_var(ncid, ncvarid, &
     1780&                                qconv(:))
     1781
     1782            ncret = nf90_def_var(ncid, 'qsconv', NF90_FLOAT, &
     1783&                                       dim1dids, ncvarid)
     1784            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1785&                                        shuffle=0,     &
     1786&                                        deflate=1,     &
     1787&                                        deflate_level=DEF_LEVEL)
     1788            ncret = nf90_put_var(ncid, ncvarid, &
     1789&                                qsconv(:))
     1790
     1791            ! New dimensions
     1792            dim2dids = (/nconvlevmax_dimid, nconvlevmax_dimid/)
     1793
     1794            ncret = nf90_def_var(ncid, 'fmass', NF90_FLOAT, &
     1795&                                       dim2dids, ncvarid)
     1796            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1797&                                        shuffle=0,     &
     1798&                                        deflate=1,     &
     1799&                                        deflate_level=DEF_LEVEL)
     1800            ncret = nf90_put_var(ncid, ncvarid, &
     1801&                                fmass(:,:))
     1802
     1803            ncret = nf90_def_var(ncid, 'fmassfrac', NF90_FLOAT, &
     1804&                                       dim2dids, ncvarid)
     1805            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1806&                                        shuffle=0,     &
     1807&                                        deflate=1,     &
     1808&                                        deflate_level=DEF_LEVEL)
     1809            ncret = nf90_put_var(ncid, ncvarid, &
     1810&                                fmassfrac(:,:))
     1811
     1812
     1813            ! New dimensions
     1814            dim2dids = (/nxmax_dimid, nymax_dimid/)
     1815
     1816            ncret = nf90_def_var(ncid, 'cbaseflux', NF90_FLOAT, &
     1817&                                       dim2dids, ncvarid)
     1818            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1819&                                        shuffle=0,     &
     1820&                                        deflate=1,     &
     1821&                                        deflate_level=DEF_LEVEL)
     1822            ncret = nf90_put_var(ncid, ncvarid, &
     1823&                                cbaseflux(0:nxmax-1,0:nymax-1))
     1824
     1825            ! New dimensions
     1826            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
     1827
     1828            ncret = nf90_def_var(ncid, 'cbasefluxn', NF90_FLOAT, &
     1829&                                       dim3dids, ncvarid)
     1830            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
     1831&                                        shuffle=0,     &
     1832&                                        deflate=1,     &
     1833&                                        deflate_level=DEF_LEVEL)
     1834            ncret = nf90_put_var(ncid, ncvarid, &
     1835&                                cbasefluxn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
     1836
     1837
     1838            ! Scalars
     1839            ncret = nf90_def_var(ncid, 'psconv', NF90_FLOAT, ncvarid)
     1840            call handle_nf90_err(ncret)
     1841            ncret = nf90_put_var(ncid, ncvarid, psconv)
     1842            call handle_nf90_err(ncret)
     1843
     1844            ncret = nf90_def_var(ncid, 'tt2conv', NF90_FLOAT, ncvarid)
     1845            call handle_nf90_err(ncret)
     1846            ncret = nf90_put_var(ncid, ncvarid, tt2conv)
     1847            call handle_nf90_err(ncret)
     1848
     1849            ncret = nf90_def_var(ncid, 'td2conv', NF90_FLOAT, ncvarid)
     1850            call handle_nf90_err(ncret)
     1851            ncret = nf90_put_var(ncid, ncvarid, td2conv)
     1852            call handle_nf90_err(ncret)
     1853
     1854            ncret = nf90_def_var(ncid, 'nconvlev', NF90_INT, ncvarid)
     1855            call handle_nf90_err(ncret)
     1856            ncret = nf90_put_var(ncid, ncvarid, nconvlev)
     1857            call handle_nf90_err(ncret)
     1858
     1859            ncret = nf90_def_var(ncid, 'nconvtop', NF90_INT, ncvarid)
     1860            call handle_nf90_err(ncret)
     1861            ncret = nf90_put_var(ncid, ncvarid, nconvtop)
     1862            call handle_nf90_err(ncret)
     1863
     1864!            PRINT *, 'SUM(pconv): ', SUM(pconv)
     1865!            PRINT *, 'SUM(qconv): ', SUM(qconv)
     1866!            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
     1867!            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
     1868!            PRINT *, 'tt2conv: ', tt2conv
     1869!            PRINT *, 'nconvlev: ', nconvlev
     1870
     1871
     1872
     1873        ELSE IF (op == 'LOAD') THEN
     1874
     1875            ! Read the preprocessed format version string and insure it
     1876            ! matches this version
     1877            ncret = nf90_inq_dimid(ncid, 'preproc_fmt_str_dim', preproc_fmt_str_dimid)
     1878            call handle_nf90_err(ncret)           
     1879            ncret = nf90_inquire_dimension(ncid, preproc_fmt_str_dimid, preproc_fmt_str_dimname, &
     1880&                                                temp_preproc_fmt_str_dim)
     1881            call handle_nf90_err(ncret)
     1882!            PRINT *, 'temp_preproc_fmt_str_dim: ', temp_preproc_fmt_str_dim
     1883
     1884            ncret = nf90_inq_varid(ncid, 'preproc_fmt_str', ncvarid)
     1885            call handle_nf90_err(ncret)
     1886            ncret = nf90_get_var(ncid, ncvarid, temp_preproc_format_version_str(1:temp_preproc_fmt_str_dim))
     1887            call handle_nf90_err(ncret)
     1888
     1889
     1890!            PRINT *, 'Reading preprocessed file format version: ', &
     1891!&                    temp_preproc_format_version_str
     1892            IF (TRIM(temp_preproc_format_version_str) == &
     1893&                                        TRIM(PREPROC_FORMAT_VERSION_STR)) THEN
     1894                CONTINUE
     1895            ELSE
     1896                ! PRINT *, ''  GK: causes relocation truncated to fit: R_X86_64_32
     1897                PRINT *, 'Inconsistent preprocessing format version'
     1898                PRINT *, 'Expected Version: ', PREPROC_FORMAT_VERSION_STR
     1899                PRINT *, 'Detected Version: ', temp_preproc_format_version_str
     1900                ! PRINT *, ''
     1901                STOP
     1902            END IF
     1903
     1904
     1905
     1906
     1907
     1908            ! Read the compiled max dimensions that were dumped from par_mod
     1909            ! when creating the fp file, so that we can compare against
     1910            ! current FLEXPART dimensions - they need to be the same, or else
     1911            ! we abort.
     1912
     1913            ! Get dimensions
     1914            ncret = nf90_inq_dimid(ncid, 'nxmax', nxmax_dimid)
     1915            call handle_nf90_err(ncret)           
     1916            ncret = nf90_inquire_dimension(ncid, nxmax_dimid, nxmax_dimname, &
     1917&                                                temp_nxmax)
     1918            call handle_nf90_err(ncret)
     1919!            PRINT *, 'temp_nxmax: ', temp_nxmax
     1920
     1921
     1922            ncret = nf90_inq_dimid(ncid, 'nymax', nymax_dimid)
     1923            call handle_nf90_err(ncret)
     1924            ncret = nf90_inquire_dimension(ncid, nymax_dimid, nymax_dimname, &
     1925&                                                temp_nymax)
     1926            call handle_nf90_err(ncret)
     1927!            PRINT *, 'temp_nymax: ', temp_nymax
     1928
     1929            ncret = nf90_inq_dimid(ncid, 'nzmax', nzmax_dimid)
     1930            call handle_nf90_err(ncret)
     1931            ncret = nf90_inquire_dimension(ncid, nzmax_dimid, nzmax_dimname, &
     1932&                                                temp_nzmax)
     1933            call handle_nf90_err(ncret)
     1934!            PRINT *, 'temp_nzmax: ', temp_nzmax
     1935
     1936            ncret = nf90_inq_dimid(ncid, 'nuvzmax', nuvzmax_dimid)
     1937            call handle_nf90_err(ncret)
     1938            ncret = nf90_inquire_dimension(ncid, nuvzmax_dimid, nuvzmax_dimname, &
     1939&                                                temp_nuvzmax)
     1940            call handle_nf90_err(ncret)
     1941!            PRINT *, 'temp_nuvzmax: ', temp_nuvzmax
     1942
     1943            ncret = nf90_inq_dimid(ncid, 'nwzmax', nwzmax_dimid)
     1944            call handle_nf90_err(ncret)
     1945            ncret = nf90_inquire_dimension(ncid, nwzmax_dimid, nwzmax_dimname, &
     1946&                                                temp_nwzmax)
     1947            call handle_nf90_err(ncret)
     1948!            PRINT *, 'temp_nwzmax: ', temp_nwzmax
     1949
     1950            ncret = nf90_inq_dimid(ncid, 'numclass', numclass_dimid)
     1951            call handle_nf90_err(ncret)
     1952            ncret = nf90_inquire_dimension(ncid, numclass_dimid, numclass_dimname, &
     1953&                                                temp_numclass)
     1954            call handle_nf90_err(ncret)
     1955!            PRINT *, 'temp_numclass: ', temp_numclass
     1956
     1957            ncret = nf90_inq_dimid(ncid, 'maxspec', maxspec_dimid)
     1958            call handle_nf90_err(ncret)
     1959            ncret = nf90_inquire_dimension(ncid, maxspec_dimid, maxspec_dimname, &
     1960&                                                temp_maxspec)
     1961            call handle_nf90_err(ncret)
     1962!            PRINT *, 'temp_maxspec: ', temp_maxspec
     1963
     1964
     1965
     1966            IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. &
     1967&                   (temp_nzmax == nzmax) .AND. &
     1968&                   (temp_nuvzmax == nuvzmax) .AND. &
     1969&                   (temp_nwzmax == nwzmax) .AND. &
     1970&                   (temp_numclass == numclass) .AND. &
     1971&                   (temp_maxspec == maxspec) ) THEN
     1972                CONTINUE
     1973            ELSE
     1974                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
     1975                ! PRINT *, ''
     1976                PRINT *, '                  FP file     Compiled FP'
     1977                PRINT *, 'nxmax:     ', temp_nxmax, '    ', nxmax
     1978                PRINT *, 'nymax:     ', temp_nymax, '    ', nymax
     1979                PRINT *, 'nzmax:     ', temp_nzmax, '    ', nzmax
     1980                PRINT *, 'nuvzmax:     ', temp_nuvzmax, '    ', nuvzmax
     1981                PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax
     1982                PRINT *, 'numclass:     ', temp_numclass, '    ', numclass
     1983                PRINT *, 'maxspec:     ', temp_maxspec, '    ', maxspec
     1984                ! PRINT *, ''
     1985                STOP
     1986            END IF
     1987
     1988
     1989
     1990
     1991            ! Scalar values
     1992
     1993
     1994            ! Get the varid , then read into scalar variable
     1995            ncret = nf90_inq_varid(ncid, 'nx', ncvarid)
     1996            call handle_nf90_err(ncret)
     1997            ncret = nf90_get_var(ncid, ncvarid, nx)
     1998            call handle_nf90_err(ncret)
     1999
     2000            ncret = nf90_inq_varid(ncid, 'ny', ncvarid)
     2001            call handle_nf90_err(ncret)
     2002            ncret = nf90_get_var(ncid, ncvarid, ny)
     2003            call handle_nf90_err(ncret)
     2004
     2005            ncret = nf90_inq_varid(ncid, 'nxmin1', ncvarid)
     2006            call handle_nf90_err(ncret)
     2007            ncret = nf90_get_var(ncid, ncvarid, nxmin1)
     2008            call handle_nf90_err(ncret)
     2009
     2010            ncret = nf90_inq_varid(ncid, 'nymin1', ncvarid)
     2011            call handle_nf90_err(ncret)
     2012            ncret = nf90_get_var(ncid, ncvarid, nymin1)
     2013            call handle_nf90_err(ncret)
     2014
     2015            ncret = nf90_inq_varid(ncid, 'nxfield', ncvarid)
     2016            call handle_nf90_err(ncret)
     2017            ncret = nf90_get_var(ncid, ncvarid, nxfield)
     2018            call handle_nf90_err(ncret)
     2019
     2020            ncret = nf90_inq_varid(ncid, 'nuvz', ncvarid)
     2021            call handle_nf90_err(ncret)
     2022            ncret = nf90_get_var(ncid, ncvarid, nuvz)
     2023            call handle_nf90_err(ncret)
     2024
     2025            ncret = nf90_inq_varid(ncid, 'nwz', ncvarid)
     2026            call handle_nf90_err(ncret)
     2027            ncret = nf90_get_var(ncid, ncvarid, nwz)
     2028            call handle_nf90_err(ncret)
     2029
     2030            ncret = nf90_inq_varid(ncid, 'nz', ncvarid)
     2031            call handle_nf90_err(ncret)
     2032            ncret = nf90_get_var(ncid, ncvarid, nz)
     2033            call handle_nf90_err(ncret)
     2034
     2035            ncret = nf90_inq_varid(ncid, 'nmixz', ncvarid)
     2036            call handle_nf90_err(ncret)
     2037            ncret = nf90_get_var(ncid, ncvarid, nmixz)
     2038            call handle_nf90_err(ncret)
     2039
     2040            ncret = nf90_inq_varid(ncid, 'nlev_ec', ncvarid)
     2041            call handle_nf90_err(ncret)
     2042            ncret = nf90_get_var(ncid, ncvarid, nlev_ec)
     2043            call handle_nf90_err(ncret)
     2044
     2045            ncret = nf90_inq_varid(ncid, 'dx', ncvarid)
     2046            call handle_nf90_err(ncret)
     2047            ncret = nf90_get_var(ncid, ncvarid, dx)
     2048            call handle_nf90_err(ncret)
     2049
     2050            ncret = nf90_inq_varid(ncid, 'dy', ncvarid)
     2051            call handle_nf90_err(ncret)
     2052            ncret = nf90_get_var(ncid, ncvarid, dy)
     2053            call handle_nf90_err(ncret)
     2054
     2055            ncret = nf90_inq_varid(ncid, 'xlon0', ncvarid)
     2056            call handle_nf90_err(ncret)
     2057            ncret = nf90_get_var(ncid, ncvarid, xlon0)
     2058            call handle_nf90_err(ncret)
     2059
     2060            ncret = nf90_inq_varid(ncid, 'ylat0', ncvarid)
     2061            call handle_nf90_err(ncret)
     2062            ncret = nf90_get_var(ncid, ncvarid, ylat0)
     2063            call handle_nf90_err(ncret)
     2064
     2065            ncret = nf90_inq_varid(ncid, 'dxconst', ncvarid)
     2066            call handle_nf90_err(ncret)
     2067            ncret = nf90_get_var(ncid, ncvarid, dxconst)
     2068            call handle_nf90_err(ncret)
     2069
     2070            ncret = nf90_inq_varid(ncid, 'dyconst', ncvarid)
     2071            call handle_nf90_err(ncret)
     2072            ncret = nf90_get_var(ncid, ncvarid, dyconst)
     2073            call handle_nf90_err(ncret)
     2074
     2075
     2076
     2077
     2078
     2079
     2080            ! Fixed fields, static in time
     2081            ncret = nf90_inq_varid(ncid, 'oro', ncvarid)
     2082            call handle_nf90_err(ncret)
     2083            ncret = nf90_get_var(ncid, ncvarid, oro(0:nxmax-1,0:nymax-1))
     2084            call handle_nf90_err(ncret)
     2085
     2086            ncret = nf90_inq_varid(ncid, 'excessoro', ncvarid)
     2087            call handle_nf90_err(ncret)
     2088            ncret = nf90_get_var(ncid, ncvarid, excessoro(0:nxmax-1,0:nymax-1))
     2089            call handle_nf90_err(ncret)
     2090
     2091            ncret = nf90_inq_varid(ncid, 'lsm', ncvarid)
     2092            call handle_nf90_err(ncret)
     2093            ncret = nf90_get_var(ncid, ncvarid, lsm(0:nxmax-1,0:nymax-1))
     2094            call handle_nf90_err(ncret)
     2095
     2096            ncret = nf90_inq_varid(ncid, 'xlanduse', ncvarid)
     2097            call handle_nf90_err(ncret)
     2098            ncret = nf90_get_var(ncid, ncvarid, xlanduse(0:nxmax-1,0:nymax-1, 1:numclass))
     2099            call handle_nf90_err(ncret)
     2100
     2101            ncret = nf90_inq_varid(ncid, 'height', ncvarid)
     2102            call handle_nf90_err(ncret)
     2103            ncret = nf90_get_var(ncid, ncvarid, height(1:nzmax))
     2104            call handle_nf90_err(ncret)
     2105
     2106
     2107
     2108
     2109            ! 3d fields
     2110
     2111            ! Get the varid and read the variable into the array
     2112            ncret = nf90_inq_varid(ncid, 'uu', ncvarid)
     2113            call handle_nf90_err(ncret)
     2114            ncret = nf90_get_var(ncid, ncvarid, uu(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2115            call handle_nf90_err(ncret)
     2116
     2117            ncret = nf90_inq_varid(ncid, 'vv', ncvarid)
     2118            call handle_nf90_err(ncret)
     2119            ncret = nf90_get_var(ncid, ncvarid, vv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2120            call handle_nf90_err(ncret)
     2121
     2122            ncret = nf90_inq_varid(ncid, 'uupol', ncvarid)
     2123            call handle_nf90_err(ncret)
     2124            ncret = nf90_get_var(ncid, ncvarid, uupol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2125            call handle_nf90_err(ncret)
     2126
     2127            ncret = nf90_inq_varid(ncid, 'vvpol', ncvarid)
     2128            call handle_nf90_err(ncret)
     2129            ncret = nf90_get_var(ncid, ncvarid, vvpol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2130            call handle_nf90_err(ncret)
     2131
     2132            ncret = nf90_inq_varid(ncid, 'ww', ncvarid)
     2133            call handle_nf90_err(ncret)
     2134            ncret = nf90_get_var(ncid, ncvarid, ww(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2135            call handle_nf90_err(ncret)
     2136
     2137            ncret = nf90_inq_varid(ncid, 'tt', ncvarid)
     2138            call handle_nf90_err(ncret)
     2139            ncret = nf90_get_var(ncid, ncvarid, tt(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2140            call handle_nf90_err(ncret)
     2141
     2142            ncret = nf90_inq_varid(ncid, 'qv', ncvarid)
     2143            call handle_nf90_err(ncret)
     2144            ncret = nf90_get_var(ncid, ncvarid, qv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2145            call handle_nf90_err(ncret)
     2146
     2147            ncret = nf90_inq_varid(ncid, 'pv', ncvarid)
     2148            call handle_nf90_err(ncret)
     2149            ncret = nf90_get_var(ncid, ncvarid, pv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2150            call handle_nf90_err(ncret)
     2151
     2152            ncret = nf90_inq_varid(ncid, 'rho', ncvarid)
     2153            call handle_nf90_err(ncret)
     2154            ncret = nf90_get_var(ncid, ncvarid, rho(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2155            call handle_nf90_err(ncret)
     2156
     2157            ncret = nf90_inq_varid(ncid, 'drhodz', ncvarid)
     2158            call handle_nf90_err(ncret)
     2159            ncret = nf90_get_var(ncid, ncvarid, drhodz(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2160            call handle_nf90_err(ncret)
     2161
     2162            ncret = nf90_inq_varid(ncid, 'clouds', ncvarid)
     2163            call handle_nf90_err(ncret)
     2164            ncret = nf90_get_var(ncid, ncvarid, clouds(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
     2165            call handle_nf90_err(ncret)
     2166
     2167            ncret = nf90_inq_varid(ncid, 'tth', ncvarid)
     2168            call handle_nf90_err(ncret)
     2169            ncret = nf90_get_var(ncid, ncvarid, tth(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
     2170            call handle_nf90_err(ncret)
     2171
     2172            ncret = nf90_inq_varid(ncid, 'qvh', ncvarid)
     2173            call handle_nf90_err(ncret)
     2174            ncret = nf90_get_var(ncid, ncvarid, qvh(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
     2175            call handle_nf90_err(ncret)
     2176
     2177            ncret = nf90_inq_varid(ncid, 'pplev', ncvarid)
     2178            call handle_nf90_err(ncret)
     2179            ncret = nf90_get_var(ncid, ncvarid, pplev(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
     2180            call handle_nf90_err(ncret)
     2181
     2182            ncret = nf90_inq_varid(ncid, 'cloudsh', ncvarid)
     2183            call handle_nf90_err(ncret)
     2184            ncret = nf90_get_var(ncid, ncvarid, cloudsh(0:nxmax-1,0:nymax-1,cm_index))
     2185            call handle_nf90_err(ncret)
     2186
     2187
     2188
     2189
     2190!            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     2191!&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     2192
     2193
     2194!            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     2195!&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     2196
     2197
     2198
     2199            ! 2d fields
     2200
     2201            ! Get the varid and read the variable into the array
     2202            ncret = nf90_inq_varid(ncid, 'ps', ncvarid)
     2203            call handle_nf90_err(ncret)
     2204            ncret = nf90_get_var(ncid, ncvarid, ps(0:nxmax-1,0:nymax-1,1,cm_index))
     2205            call handle_nf90_err(ncret)
     2206
     2207            ncret = nf90_inq_varid(ncid, 'sd', ncvarid)
     2208            call handle_nf90_err(ncret)
     2209            ncret = nf90_get_var(ncid, ncvarid, sd(0:nxmax-1,0:nymax-1,1,cm_index))
     2210            call handle_nf90_err(ncret)
     2211
     2212            ncret = nf90_inq_varid(ncid, 'msl', ncvarid)
     2213            call handle_nf90_err(ncret)
     2214            ncret = nf90_get_var(ncid, ncvarid, msl(0:nxmax-1,0:nymax-1,1,cm_index))
     2215            call handle_nf90_err(ncret)
     2216
     2217            ncret = nf90_inq_varid(ncid, 'tcc', ncvarid)
     2218            call handle_nf90_err(ncret)
     2219            ncret = nf90_get_var(ncid, ncvarid, tcc(0:nxmax-1,0:nymax-1,1,cm_index))
     2220            call handle_nf90_err(ncret)
     2221
     2222            ncret = nf90_inq_varid(ncid, 'u10', ncvarid)
     2223            call handle_nf90_err(ncret)
     2224            ncret = nf90_get_var(ncid, ncvarid, u10(0:nxmax-1,0:nymax-1,1,cm_index))
     2225            call handle_nf90_err(ncret)
     2226
     2227            ncret = nf90_inq_varid(ncid, 'v10', ncvarid)
     2228            call handle_nf90_err(ncret)
     2229            ncret = nf90_get_var(ncid, ncvarid, v10(0:nxmax-1,0:nymax-1,1,cm_index))
     2230            call handle_nf90_err(ncret)
     2231
     2232            ncret = nf90_inq_varid(ncid, 'tt2', ncvarid)
     2233            call handle_nf90_err(ncret)
     2234            ncret = nf90_get_var(ncid, ncvarid, tt2(0:nxmax-1,0:nymax-1,1,cm_index))
     2235            call handle_nf90_err(ncret)
     2236
     2237            ncret = nf90_inq_varid(ncid, 'td2', ncvarid)
     2238            call handle_nf90_err(ncret)
     2239            ncret = nf90_get_var(ncid, ncvarid, td2(0:nxmax-1,0:nymax-1,1,cm_index))
     2240            call handle_nf90_err(ncret)
     2241
     2242            ncret = nf90_inq_varid(ncid, 'lsprec', ncvarid)
     2243            call handle_nf90_err(ncret)
     2244            ncret = nf90_get_var(ncid, ncvarid, lsprec(0:nxmax-1,0:nymax-1,1,cm_index))
     2245            call handle_nf90_err(ncret)
     2246
     2247            ncret = nf90_inq_varid(ncid, 'convprec', ncvarid)
     2248            call handle_nf90_err(ncret)
     2249            ncret = nf90_get_var(ncid, ncvarid, convprec(0:nxmax-1,0:nymax-1,1,cm_index))
     2250            call handle_nf90_err(ncret)
     2251
     2252            ncret = nf90_inq_varid(ncid, 'sshf', ncvarid)
     2253            call handle_nf90_err(ncret)
     2254            ncret = nf90_get_var(ncid, ncvarid, sshf(0:nxmax-1,0:nymax-1,1,cm_index))
     2255            call handle_nf90_err(ncret)
     2256
     2257            ncret = nf90_inq_varid(ncid, 'ssr', ncvarid)
     2258            call handle_nf90_err(ncret)
     2259            ncret = nf90_get_var(ncid, ncvarid, ssr(0:nxmax-1,0:nymax-1,1,cm_index))
     2260            call handle_nf90_err(ncret)
     2261
     2262            ncret = nf90_inq_varid(ncid, 'surfstr', ncvarid)
     2263            call handle_nf90_err(ncret)
     2264            ncret = nf90_get_var(ncid, ncvarid, surfstr(0:nxmax-1,0:nymax-1,1,cm_index))
     2265            call handle_nf90_err(ncret)
     2266
     2267            ncret = nf90_inq_varid(ncid, 'ustar', ncvarid)
     2268            call handle_nf90_err(ncret)
     2269            ncret = nf90_get_var(ncid, ncvarid, ustar(0:nxmax-1,0:nymax-1,1,cm_index))
     2270            call handle_nf90_err(ncret)
     2271
     2272            ncret = nf90_inq_varid(ncid, 'wstar', ncvarid)
     2273            call handle_nf90_err(ncret)
     2274            ncret = nf90_get_var(ncid, ncvarid, wstar(0:nxmax-1,0:nymax-1,1,cm_index))
     2275            call handle_nf90_err(ncret)
     2276
     2277            ncret = nf90_inq_varid(ncid, 'hmix', ncvarid)
     2278            call handle_nf90_err(ncret)
     2279            ncret = nf90_get_var(ncid, ncvarid, hmix(0:nxmax-1,0:nymax-1,1,cm_index))
     2280            call handle_nf90_err(ncret)
     2281
     2282            ncret = nf90_inq_varid(ncid, 'tropopause', ncvarid)
     2283            call handle_nf90_err(ncret)
     2284            ncret = nf90_get_var(ncid, ncvarid, tropopause(0:nxmax-1,0:nymax-1,1,cm_index))
     2285            call handle_nf90_err(ncret)
     2286
     2287            ncret = nf90_inq_varid(ncid, 'oli', ncvarid)
     2288            call handle_nf90_err(ncret)
     2289            ncret = nf90_get_var(ncid, ncvarid, oli(0:nxmax-1,0:nymax-1,1,cm_index))
     2290            call handle_nf90_err(ncret)
     2291
     2292            ncret = nf90_inq_varid(ncid, 'diffk', ncvarid)
     2293            call handle_nf90_err(ncret)
     2294            ncret = nf90_get_var(ncid, ncvarid, diffk(0:nxmax-1,0:nymax-1,1,cm_index))
     2295            call handle_nf90_err(ncret)
     2296
     2297
     2298
     2299
     2300!            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
     2301!&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
     2302
     2303!            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
     2304!&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
     2305
     2306
     2307            ncret = nf90_inq_varid(ncid, 'vdep', ncvarid)
     2308            call handle_nf90_err(ncret)
     2309            ncret = nf90_get_var(ncid, ncvarid, vdep(0:nxmax-1,0:nymax-1,1:maxspec, cm_index))
     2310            call handle_nf90_err(ncret)
     2311
     2312
     2313
     2314
     2315
     2316            ! 1d fields
     2317
     2318            ncret = nf90_inq_varid(ncid, 'z0', ncvarid)
     2319            call handle_nf90_err(ncret)
     2320            ncret = nf90_get_var(ncid, ncvarid, z0(1:numclass))
     2321            call handle_nf90_err(ncret)
     2322
     2323            ncret = nf90_inq_varid(ncid, 'akm', ncvarid)
     2324            call handle_nf90_err(ncret)
     2325            ncret = nf90_get_var(ncid, ncvarid, akm(1:nwzmax))
     2326            call handle_nf90_err(ncret)
     2327
     2328            ncret = nf90_inq_varid(ncid, 'bkm', ncvarid)
     2329            call handle_nf90_err(ncret)
     2330            ncret = nf90_get_var(ncid, ncvarid, bkm(1:nwzmax))
     2331            call handle_nf90_err(ncret)
     2332
     2333            ncret = nf90_inq_varid(ncid, 'akz', ncvarid)
     2334            call handle_nf90_err(ncret)
     2335            ncret = nf90_get_var(ncid, ncvarid, akz(1:nuvzmax))
     2336            call handle_nf90_err(ncret)
     2337
     2338            ncret = nf90_inq_varid(ncid, 'bkz', ncvarid)
     2339            call handle_nf90_err(ncret)
     2340            ncret = nf90_get_var(ncid, ncvarid, bkz(1:nuvzmax))
     2341            call handle_nf90_err(ncret)
     2342
     2343            ncret = nf90_inq_varid(ncid, 'aknew', ncvarid)
     2344            call handle_nf90_err(ncret)
     2345            ncret = nf90_get_var(ncid, ncvarid, aknew(1:nzmax))
     2346            call handle_nf90_err(ncret)
     2347
     2348            ncret = nf90_inq_varid(ncid, 'bknew', ncvarid)
     2349            call handle_nf90_err(ncret)
     2350            ncret = nf90_get_var(ncid, ncvarid, bknew(1:nzmax))
     2351            call handle_nf90_err(ncret)
     2352
     2353
     2354
     2355!            PRINT *, 'SUM(bknew(1:nzmax)): ', &
     2356!&                                        SUM(bknew(1:nzmax))
     2357
     2358
     2359
     2360
     2361            ! Now the nested input grid variables
     2362            ! Get the compiled values that were written into the FP file, and
     2363            ! make sure they are equal to the current compiled values, to make
     2364            ! sure we are working with consistent arrays
     2365            ncret = nf90_inq_dimid(ncid, 'maxnests', maxnests_dimid)
     2366            call handle_nf90_err(ncret)
     2367            ncret = nf90_inquire_dimension(ncid, maxnests_dimid, maxnests_dimname, &
     2368&                                                temp_maxnests)
     2369            call handle_nf90_err(ncret)
     2370!            PRINT *, 'temp_maxnests: ', temp_maxnests
     2371
     2372            ncret = nf90_inq_dimid(ncid, 'nxmaxn', nxmaxn_dimid)
     2373            call handle_nf90_err(ncret)
     2374            ncret = nf90_inquire_dimension(ncid, nxmaxn_dimid, nxmaxn_dimname, &
     2375&                                                temp_nxmaxn)
     2376            call handle_nf90_err(ncret)
     2377!            PRINT *, 'temp_nxmaxn: ', temp_nxmaxn
     2378
     2379            ncret = nf90_inq_dimid(ncid, 'nymaxn', nymaxn_dimid)
     2380            call handle_nf90_err(ncret)
     2381            ncret = nf90_inquire_dimension(ncid, nymaxn_dimid, nymaxn_dimname, &
     2382&                                                temp_nymaxn)
     2383            call handle_nf90_err(ncret)
     2384            PRINT *, 'temp_nymaxn: ', temp_nymaxn
     2385
     2386            ! Note that maxspec_dimid and numclass_dimid were checked above
     2387
     2388
     2389
     2390
     2391            IF ( (temp_nxmaxn == nxmaxn) .AND. (temp_nymaxn == nymaxn) .AND. &
     2392&                   (temp_maxnests == maxnests) ) THEN
     2393                CONTINUE
     2394            ELSE
     2395                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
     2396                ! PRINT *, ''
     2397                PRINT *, '                  FP file     Compiled FP'
     2398                PRINT *, 'nxmaxn:     ', temp_nxmaxn, '    ', nxmaxn
     2399                PRINT *, 'nymaxn:     ', temp_nymaxn, '    ', nymaxn
     2400                PRINT *, 'maxnests:     ', temp_maxnests, '    ', maxnests
     2401                STOP
     2402            END IF
     2403
     2404
     2405
     2406            ! Nested, scalar values (for each nest)
     2407            ncret = nf90_inq_varid(ncid, 'nxn', ncvarid)
     2408            call handle_nf90_err(ncret)
     2409            ncret = nf90_get_var(ncid, ncvarid, nxn(1:maxnests))
     2410            call handle_nf90_err(ncret)
     2411
     2412            ncret = nf90_inq_varid(ncid, 'nyn', ncvarid)
     2413            call handle_nf90_err(ncret)
     2414            ncret = nf90_get_var(ncid, ncvarid, nyn(1:maxnests))
     2415            call handle_nf90_err(ncret)
     2416
     2417            ncret = nf90_inq_varid(ncid, 'dxn', ncvarid)
     2418            call handle_nf90_err(ncret)
     2419            ncret = nf90_get_var(ncid, ncvarid, dxn(1:maxnests))
     2420            call handle_nf90_err(ncret)
     2421
     2422            ncret = nf90_inq_varid(ncid, 'dyn', ncvarid)
     2423            call handle_nf90_err(ncret)
     2424            ncret = nf90_get_var(ncid, ncvarid, dyn(1:maxnests))
     2425            call handle_nf90_err(ncret)
     2426
     2427            ncret = nf90_inq_varid(ncid, 'xlon0n', ncvarid)
     2428            call handle_nf90_err(ncret)
     2429            ncret = nf90_get_var(ncid, ncvarid, xlon0n(1:maxnests))
     2430            call handle_nf90_err(ncret)
     2431
     2432            ncret = nf90_inq_varid(ncid, 'ylat0n', ncvarid)
     2433            call handle_nf90_err(ncret)
     2434            ncret = nf90_get_var(ncid, ncvarid, ylat0n(1:maxnests))
     2435            call handle_nf90_err(ncret)
     2436
     2437
     2438
     2439            ! Nested fields, static over time
     2440            ncret = nf90_inq_varid(ncid, 'oron', ncvarid)
     2441            call handle_nf90_err(ncret)
     2442            ncret = nf90_get_var(ncid, ncvarid, oron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
     2443            call handle_nf90_err(ncret)
     2444
     2445            ncret = nf90_inq_varid(ncid, 'excessoron', ncvarid)
     2446            call handle_nf90_err(ncret)
     2447            ncret = nf90_get_var(ncid, ncvarid, excessoron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
     2448            call handle_nf90_err(ncret)
     2449
     2450            ncret = nf90_inq_varid(ncid, 'lsmn', ncvarid)
     2451            call handle_nf90_err(ncret)
     2452            ncret = nf90_get_var(ncid, ncvarid, lsmn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
     2453            call handle_nf90_err(ncret)
     2454
     2455            ncret = nf90_inq_varid(ncid, 'xlandusen', ncvarid)
     2456            call handle_nf90_err(ncret)
     2457            ncret = nf90_get_var(ncid, ncvarid, xlandusen(0:nxmaxn-1,0:nymaxn-1,1:numclass,1:maxnests))
     2458            call handle_nf90_err(ncret)
     2459
     2460
     2461!            PRINT *, 'SUM(oron): ', SUM(oron)
     2462
     2463
     2464
     2465
     2466            ! 3d nested fields
     2467
     2468            ncret = nf90_inq_varid(ncid, 'uun', ncvarid)
     2469            call handle_nf90_err(ncret)
     2470            ncret = nf90_get_var(ncid, ncvarid, uun(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2471            call handle_nf90_err(ncret)
     2472
     2473            ncret = nf90_inq_varid(ncid, 'vvn', ncvarid)
     2474            call handle_nf90_err(ncret)
     2475            ncret = nf90_get_var(ncid, ncvarid, vvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2476            call handle_nf90_err(ncret)
     2477
     2478            ncret = nf90_inq_varid(ncid, 'wwn', ncvarid)
     2479            call handle_nf90_err(ncret)
     2480            ncret = nf90_get_var(ncid, ncvarid, wwn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2481            call handle_nf90_err(ncret)
     2482
     2483            ncret = nf90_inq_varid(ncid, 'ttn', ncvarid)
     2484            call handle_nf90_err(ncret)
     2485            ncret = nf90_get_var(ncid, ncvarid, ttn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2486            call handle_nf90_err(ncret)
     2487
     2488            ncret = nf90_inq_varid(ncid, 'qvn', ncvarid)
     2489            call handle_nf90_err(ncret)
     2490            ncret = nf90_get_var(ncid, ncvarid, qvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2491            call handle_nf90_err(ncret)
     2492
     2493            ncret = nf90_inq_varid(ncid, 'pvn', ncvarid)
     2494            call handle_nf90_err(ncret)
     2495            ncret = nf90_get_var(ncid, ncvarid, pvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2496            call handle_nf90_err(ncret)
     2497
     2498            ncret = nf90_inq_varid(ncid, 'rhon', ncvarid)
     2499            call handle_nf90_err(ncret)
     2500            ncret = nf90_get_var(ncid, ncvarid, rhon(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2501            call handle_nf90_err(ncret)
     2502
     2503            ncret = nf90_inq_varid(ncid, 'drhodzn', ncvarid)
     2504            call handle_nf90_err(ncret)
     2505            ncret = nf90_get_var(ncid, ncvarid, drhodzn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
     2506            call handle_nf90_err(ncret)
     2507
     2508            ncret = nf90_inq_varid(ncid, 'tthn', ncvarid)
     2509            call handle_nf90_err(ncret)
     2510            ncret = nf90_get_var(ncid, ncvarid, tthn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
     2511            call handle_nf90_err(ncret)
     2512
     2513            ncret = nf90_inq_varid(ncid, 'qvhn', ncvarid)
     2514            call handle_nf90_err(ncret)
     2515            ncret = nf90_get_var(ncid, ncvarid, qvhn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
     2516            call handle_nf90_err(ncret)
     2517
     2518            ncret = nf90_inq_varid(ncid, 'cloudsn', ncvarid)
     2519            call handle_nf90_err(ncret)
     2520            ncret = nf90_get_var(ncid, ncvarid, cloudsn(0:nxmaxn-1,0:nymaxn-1,0:nzmax,cm_index,1:maxnests))
     2521            call handle_nf90_err(ncret)
     2522
     2523            ncret = nf90_inq_varid(ncid, 'cloudsnh', ncvarid)
     2524            call handle_nf90_err(ncret)
     2525            ncret = nf90_get_var(ncid, ncvarid, cloudsnh(0:nxmaxn-1,0:nymaxn-1,cm_index,1:maxnests))
     2526            call handle_nf90_err(ncret)
     2527
     2528
     2529
     2530
     2531!            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
     2532!            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
     2533!            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
     2534
     2535
     2536
     2537
     2538            ! 2d nested fields
     2539            ncret = nf90_inq_varid(ncid, 'psn', ncvarid)
     2540            call handle_nf90_err(ncret)
     2541            ncret = nf90_get_var(ncid, ncvarid, psn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2542            call handle_nf90_err(ncret)
     2543
     2544            ncret = nf90_inq_varid(ncid, 'sdn', ncvarid)
     2545            call handle_nf90_err(ncret)
     2546            ncret = nf90_get_var(ncid, ncvarid, sdn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2547            call handle_nf90_err(ncret)
     2548
     2549            ncret = nf90_inq_varid(ncid, 'msln', ncvarid)
     2550            call handle_nf90_err(ncret)
     2551            ncret = nf90_get_var(ncid, ncvarid, msln(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2552            call handle_nf90_err(ncret)
     2553
     2554            ncret = nf90_inq_varid(ncid, 'tccn', ncvarid)
     2555            call handle_nf90_err(ncret)
     2556            ncret = nf90_get_var(ncid, ncvarid, tccn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2557            call handle_nf90_err(ncret)
     2558
     2559            ncret = nf90_inq_varid(ncid, 'u10n', ncvarid)
     2560            call handle_nf90_err(ncret)
     2561            ncret = nf90_get_var(ncid, ncvarid, u10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2562            call handle_nf90_err(ncret)
     2563
     2564            ncret = nf90_inq_varid(ncid, 'v10n', ncvarid)
     2565            call handle_nf90_err(ncret)
     2566            ncret = nf90_get_var(ncid, ncvarid, v10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2567            call handle_nf90_err(ncret)
     2568
     2569            ncret = nf90_inq_varid(ncid, 'tt2n', ncvarid)
     2570            call handle_nf90_err(ncret)
     2571            ncret = nf90_get_var(ncid, ncvarid, tt2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2572            call handle_nf90_err(ncret)
     2573
     2574            ncret = nf90_inq_varid(ncid, 'td2n', ncvarid)
     2575            call handle_nf90_err(ncret)
     2576            ncret = nf90_get_var(ncid, ncvarid, td2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2577            call handle_nf90_err(ncret)
     2578
     2579            ncret = nf90_inq_varid(ncid, 'lsprecn', ncvarid)
     2580            call handle_nf90_err(ncret)
     2581            ncret = nf90_get_var(ncid, ncvarid, lsprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2582            call handle_nf90_err(ncret)
     2583
     2584            ncret = nf90_inq_varid(ncid, 'convprecn', ncvarid)
     2585            call handle_nf90_err(ncret)
     2586            ncret = nf90_get_var(ncid, ncvarid, convprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2587            call handle_nf90_err(ncret)
     2588
     2589            ncret = nf90_inq_varid(ncid, 'sshfn', ncvarid)
     2590            call handle_nf90_err(ncret)
     2591            ncret = nf90_get_var(ncid, ncvarid, sshfn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2592            call handle_nf90_err(ncret)
     2593
     2594            ncret = nf90_inq_varid(ncid, 'ssrn', ncvarid)
     2595            call handle_nf90_err(ncret)
     2596            ncret = nf90_get_var(ncid, ncvarid, ssrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2597            call handle_nf90_err(ncret)
     2598
     2599            ncret = nf90_inq_varid(ncid, 'surfstrn', ncvarid)
     2600            call handle_nf90_err(ncret)
     2601            ncret = nf90_get_var(ncid, ncvarid, surfstrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2602            call handle_nf90_err(ncret)
     2603
     2604            ncret = nf90_inq_varid(ncid, 'ustarn', ncvarid)
     2605            call handle_nf90_err(ncret)
     2606            ncret = nf90_get_var(ncid, ncvarid, ustarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2607            call handle_nf90_err(ncret)
     2608
     2609            ncret = nf90_inq_varid(ncid, 'wstarn', ncvarid)
     2610            call handle_nf90_err(ncret)
     2611            ncret = nf90_get_var(ncid, ncvarid, wstarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2612            call handle_nf90_err(ncret)
     2613
     2614            ncret = nf90_inq_varid(ncid, 'hmixn', ncvarid)
     2615            call handle_nf90_err(ncret)
     2616            ncret = nf90_get_var(ncid, ncvarid, hmixn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2617            call handle_nf90_err(ncret)
     2618
     2619            ncret = nf90_inq_varid(ncid, 'tropopausen', ncvarid)
     2620            call handle_nf90_err(ncret)
     2621            ncret = nf90_get_var(ncid, ncvarid, tropopausen(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2622            call handle_nf90_err(ncret)
     2623
     2624            ncret = nf90_inq_varid(ncid, 'olin', ncvarid)
     2625            call handle_nf90_err(ncret)
     2626            ncret = nf90_get_var(ncid, ncvarid, olin(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2627            call handle_nf90_err(ncret)
     2628
     2629            ncret = nf90_inq_varid(ncid, 'diffkn', ncvarid)
     2630            call handle_nf90_err(ncret)
     2631            ncret = nf90_get_var(ncid, ncvarid, diffkn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
     2632            call handle_nf90_err(ncret)
     2633
     2634            ncret = nf90_inq_varid(ncid, 'vdepn', ncvarid)
     2635            call handle_nf90_err(ncret)
     2636            ncret = nf90_get_var(ncid, ncvarid, vdepn(0:nxmaxn-1,0:nymaxn-1,1:maxspec,cm_index,1:maxnests))
     2637            call handle_nf90_err(ncret)
     2638
     2639
     2640
     2641
     2642!            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
     2643!            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
     2644!            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
     2645
     2646
     2647
     2648            ! Auxiliary variables for nests
     2649            ncret = nf90_inq_varid(ncid, 'xresoln', ncvarid)
     2650            call handle_nf90_err(ncret)
     2651            ncret = nf90_get_var(ncid, ncvarid, xresoln(0:maxnests))
     2652            call handle_nf90_err(ncret)
     2653
     2654            ncret = nf90_inq_varid(ncid, 'yresoln', ncvarid)
     2655            call handle_nf90_err(ncret)
     2656            ncret = nf90_get_var(ncid, ncvarid, yresoln(0:maxnests))
     2657            call handle_nf90_err(ncret)
     2658
     2659            ncret = nf90_inq_varid(ncid, 'xln', ncvarid)
     2660            call handle_nf90_err(ncret)
     2661            ncret = nf90_get_var(ncid, ncvarid, xln(1:maxnests))
     2662            call handle_nf90_err(ncret)
     2663
     2664            ncret = nf90_inq_varid(ncid, 'yln', ncvarid)
     2665            call handle_nf90_err(ncret)
     2666            ncret = nf90_get_var(ncid, ncvarid, yln(1:maxnests))
     2667            call handle_nf90_err(ncret)
     2668
     2669            ncret = nf90_inq_varid(ncid, 'xrn', ncvarid)
     2670            call handle_nf90_err(ncret)
     2671            ncret = nf90_get_var(ncid, ncvarid, xrn(1:maxnests))
     2672            call handle_nf90_err(ncret)
     2673
     2674            ncret = nf90_inq_varid(ncid, 'yrn', ncvarid)
     2675            call handle_nf90_err(ncret)
     2676            ncret = nf90_get_var(ncid, ncvarid, yrn(1:maxnests))
     2677            call handle_nf90_err(ncret)
     2678
     2679
     2680
     2681!            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
     2682!            PRINT *, 'SUM(xrn): ', SUM(xrn)
     2683
     2684
     2685
     2686            ! Variables for polar stereographic projection
     2687            ncret = nf90_inq_varid(ncid, 'southpolemap', ncvarid)
     2688            call handle_nf90_err(ncret)
     2689            ncret = nf90_get_var(ncid, ncvarid, southpolemap(:))
     2690            call handle_nf90_err(ncret)
     2691
     2692            ncret = nf90_inq_varid(ncid, 'northpolemap', ncvarid)
     2693            call handle_nf90_err(ncret)
     2694            ncret = nf90_get_var(ncid, ncvarid, northpolemap(:))
     2695            call handle_nf90_err(ncret)
     2696
     2697            ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
     2698            ! to INTEGER for NetCDF storage
     2699            ncret = nf90_inq_varid(ncid, 'xglobal', ncvarid)
     2700            call handle_nf90_err(ncret)
     2701            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
     2702            call handle_nf90_err(ncret)
     2703            xglobal = integer2logical(temp_integer)
     2704
     2705            ncret = nf90_inq_varid(ncid, 'sglobal', ncvarid)
     2706            call handle_nf90_err(ncret)
     2707            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
     2708            call handle_nf90_err(ncret)
     2709            sglobal = integer2logical(temp_integer)
     2710
     2711            ncret = nf90_inq_varid(ncid, 'nglobal', ncvarid)
     2712            call handle_nf90_err(ncret)
     2713            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
     2714            call handle_nf90_err(ncret)
     2715            nglobal = integer2logical(temp_integer)
     2716
     2717            ncret = nf90_inq_varid(ncid, 'switchnorthg', ncvarid)
     2718            call handle_nf90_err(ncret)
     2719            ncret = nf90_get_var(ncid, ncvarid, switchnorthg)
     2720            call handle_nf90_err(ncret)
     2721
     2722            ncret = nf90_inq_varid(ncid, 'switchsouthg', ncvarid)
     2723            call handle_nf90_err(ncret)
     2724            ncret = nf90_get_var(ncid, ncvarid, switchsouthg)
     2725            call handle_nf90_err(ncret)
     2726
     2727
     2728!            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
     2729!            PRINT *, 'xglobal: ', xglobal
     2730!            PRINT *, 'sglobal: ', sglobal
     2731!            PRINT *, 'nglobal: ', nglobal
     2732!            PRINT *, 'switchsouthg: ', switchsouthg
     2733
     2734
     2735
     2736
     2737            ! Variables declared in conv_mod (convection)
     2738            ncret = nf90_inq_varid(ncid, 'pconv', ncvarid)
     2739            call handle_nf90_err(ncret)
     2740            ncret = nf90_get_var(ncid, ncvarid, pconv(:))
     2741            call handle_nf90_err(ncret)
     2742
     2743            ncret = nf90_inq_varid(ncid, 'dpr', ncvarid)
     2744            call handle_nf90_err(ncret)
     2745            ncret = nf90_get_var(ncid, ncvarid, dpr(:))
     2746            call handle_nf90_err(ncret)
     2747
     2748            ncret = nf90_inq_varid(ncid, 'pconv_hpa', ncvarid)
     2749            call handle_nf90_err(ncret)
     2750            ncret = nf90_get_var(ncid, ncvarid, pconv_hpa(:))
     2751            call handle_nf90_err(ncret)
     2752
     2753            ncret = nf90_inq_varid(ncid, 'ft', ncvarid)
     2754            call handle_nf90_err(ncret)
     2755            ncret = nf90_get_var(ncid, ncvarid, ft(:))
     2756            call handle_nf90_err(ncret)
     2757
     2758            ncret = nf90_inq_varid(ncid, 'fq', ncvarid)
     2759            call handle_nf90_err(ncret)
     2760            ncret = nf90_get_var(ncid, ncvarid, fq(:))
     2761            call handle_nf90_err(ncret)
     2762
     2763            ncret = nf90_inq_varid(ncid, 'sub', ncvarid)
     2764            call handle_nf90_err(ncret)
     2765            ncret = nf90_get_var(ncid, ncvarid, sub(:))
     2766            call handle_nf90_err(ncret)
     2767
     2768            ncret = nf90_inq_varid(ncid, 'phconv', ncvarid)
     2769            call handle_nf90_err(ncret)
     2770            ncret = nf90_get_var(ncid, ncvarid, phconv(:))
     2771            call handle_nf90_err(ncret)
     2772
     2773            ncret = nf90_inq_varid(ncid, 'phconv_hpa', ncvarid)
     2774            call handle_nf90_err(ncret)
     2775            ncret = nf90_get_var(ncid, ncvarid, phconv_hpa(:))
     2776            call handle_nf90_err(ncret)
     2777
     2778            ncret = nf90_inq_varid(ncid, 'tconv', ncvarid)
     2779            call handle_nf90_err(ncret)
     2780            ncret = nf90_get_var(ncid, ncvarid, tconv(:))
     2781            call handle_nf90_err(ncret)
     2782
     2783            ncret = nf90_inq_varid(ncid, 'qconv', ncvarid)
     2784            call handle_nf90_err(ncret)
     2785            ncret = nf90_get_var(ncid, ncvarid, qconv(:))
     2786            call handle_nf90_err(ncret)
     2787
     2788            ncret = nf90_inq_varid(ncid, 'qsconv', ncvarid)
     2789            call handle_nf90_err(ncret)
     2790            ncret = nf90_get_var(ncid, ncvarid, qsconv(:))
     2791            call handle_nf90_err(ncret)
     2792
     2793            ncret = nf90_inq_varid(ncid, 'fmass', ncvarid)
     2794            call handle_nf90_err(ncret)
     2795            ncret = nf90_get_var(ncid, ncvarid, fmass(:,:))
     2796            call handle_nf90_err(ncret)
     2797
     2798            ncret = nf90_inq_varid(ncid, 'fmassfrac', ncvarid)
     2799            call handle_nf90_err(ncret)
     2800            ncret = nf90_get_var(ncid, ncvarid, fmassfrac(:,:))
     2801            call handle_nf90_err(ncret)
     2802
     2803            ncret = nf90_inq_varid(ncid, 'cbaseflux', ncvarid)
     2804            call handle_nf90_err(ncret)
     2805            ncret = nf90_get_var(ncid, ncvarid, cbaseflux(0:nxmax-1,0:nymax-1))
     2806            call handle_nf90_err(ncret)
     2807
     2808            ncret = nf90_inq_varid(ncid, 'cbasefluxn', ncvarid)
     2809            call handle_nf90_err(ncret)
     2810            ncret = nf90_get_var(ncid, ncvarid, cbasefluxn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
     2811            call handle_nf90_err(ncret)
     2812
     2813            ncret = nf90_inq_varid(ncid, 'psconv', ncvarid)
     2814            call handle_nf90_err(ncret)
     2815            ncret = nf90_get_var(ncid, ncvarid, psconv)
     2816            call handle_nf90_err(ncret)
     2817
     2818            ncret = nf90_inq_varid(ncid, 'tt2conv', ncvarid)
     2819            call handle_nf90_err(ncret)
     2820            ncret = nf90_get_var(ncid, ncvarid, tt2conv)
     2821            call handle_nf90_err(ncret)
     2822
     2823            ncret = nf90_inq_varid(ncid, 'td2conv', ncvarid)
     2824            call handle_nf90_err(ncret)
     2825            ncret = nf90_get_var(ncid, ncvarid, td2conv)
     2826            call handle_nf90_err(ncret)
     2827
     2828            ncret = nf90_inq_varid(ncid, 'nconvlev', ncvarid)
     2829            call handle_nf90_err(ncret)
     2830            ncret = nf90_get_var(ncid, ncvarid, nconvlev)
     2831            call handle_nf90_err(ncret)
     2832
     2833            ncret = nf90_inq_varid(ncid, 'nconvtop', ncvarid)
     2834            call handle_nf90_err(ncret)
     2835            ncret = nf90_get_var(ncid, ncvarid, nconvtop)
     2836            call handle_nf90_err(ncret)
     2837
     2838
     2839
     2840
     2841!            PRINT *, 'SUM(pconv): ', SUM(pconv)
     2842!            PRINT *, 'SUM(qconv): ', SUM(qconv)
     2843!            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
     2844!            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
     2845!            PRINT *, 'tt2conv: ', tt2conv
     2846!            PRINT *, 'nconvlev: ', nconvlev
     2847
     2848
     2849
     2850        ELSE
     2851            STOP 'fpio(): Illegal operation'
     2852           
     2853        ENDIF
     2854    END SUBROUTINE fpio
     2855
     2856
     2857
     2858
     2859
     2860    SUBROUTINE fpio_rawbin(iounit, op, cm_index)
    2652861        IMPLICIT NONE
    2662862        INTEGER, INTENT(IN) :: iounit
     
    2702866                                                  ! Should be 1 or 2
    2712867
     2868
     2869        INTEGER :: temp_integer   ! temporary value
     2870
     2871
    2722872        ! These are temporary variables, used in the LOAD option, for
    2732873        ! comparing against the current values in FLEXPART of nxmax, nymax, ...
    2742874        INTEGER :: temp_nxmax, temp_nymax, temp_nzmax, &
    275 &                  temp_nuvzmax, temp_nwzmax
    276 
    277         CHARACTER(LEN=12) :: temp_preproc_format_version_str
     2875&                  temp_nuvzmax, temp_nwzmax, &
     2876&                  temp_maxspec, temp_numclass,&
     2877&                  temp_maxnests, temp_nxmaxn, temp_nymaxn, temp_preproc_fmt_str_dim
     2878
     2879        CHARACTER(LEN=PREPROC_FMT_STR_DIM) :: temp_preproc_format_version_str
    2782880
    2792881        CHARACTER(LEN=128) :: errmesg
    2802882
     2883        INTEGER, PARAMETER :: DEF_LEVEL = 3
     2884
    2812885        if (op == 'DUMP') THEN
    2822886
    2832887
    2842888            ! Write the preprocessing format version string
     2889            !  NEED TO FILL THIS IN FOR NC4
     2890
     2891
     2892
    2852893            WRITE (iounit) PREPROC_FORMAT_VERSION_STR
     2894
    2862895
    2872896            ! Write the compiled max dimensions from par_mod - these are
    2882897            ! not meant to be reassigned during a LOAD, but used as "header"
    2892898            ! information to provide the structure of arrays
     2899
     2900
    2902901            WRITE (iounit) nxmax, nymax, nzmax, nuvzmax, nwzmax
    2912902
     2903
     2904
     2905
    2922906            ! Scalar values
    293             WRITE(iounit) nx, ny, nxmin1, nymin1, nxfield
    294             WRITE(iounit) nuvz, nwz, nz, nmixz, nlev_ec
    295             WRITE(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
    2962907
    2972908            ! Fixed fields, static in time
     2909
     2910
     2911
    2982912            WRITE(iounit) oro, excessoro, lsm, xlanduse, height
     2913
     2914
     2915 
    2992916
    3002917            ! 3d fields
     
    3142931            WRITE(iounit) clouds(:,:,:,cm_index)
    3152932            WRITE(iounit) cloudsh(:,:,cm_index)
     2933
     2934
     2935
     2936!            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     2937!&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     2938
     2939!            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     2940!&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     2941
     2942
    3162943
    3172944            ! 2d fields
     
    3372964            WRITE(iounit) vdep(:,:,:,cm_index)
    3382965
     2966
     2967
     2968
    3392969            ! 1d fields
    3402970            WRITE(iounit) z0(:)
     
    3462976            WRITE(iounit) bknew(:)
    3472977
    348             ! Nested, scalar values (for each nest)
     2978
     2979
     2980
     2981
     2982!            PRINT *, 'SUM(bknew(1:nzmax)): ', &
     2983!&                                        SUM(bknew(1:nzmax))
     2984
     2985
     2986
     2987            ! Getting ready to add in nested code
     2988
     2989            ! These are compiled max dimensions from par_mod - these are
     2990            ! not meant to be reassigned during a LOAD, but used as "header"
     2991            ! information to provide the structure of arrays
    3492992            WRITE(iounit) nxn(:)
    3502993            WRITE(iounit) nyn(:)
     
    3542997            WRITE(iounit) ylat0n(:)
    3552998
     2999            ! Nested, scalar values (for each nest)
     3000
     3001
    3563002            ! Nested fields, static over time
    3573003            WRITE(iounit) oron, excessoron, lsmn, xlandusen
     3004
     3005
     3006!           PRINT *, 'SUM(oron): ', SUM(oron)
     3007
     3008
    3583009
    3593010            ! 3d nested fields
     
    3703021            WRITE(iounit) tthn(:,:,:,cm_index,:)
    3713022            WRITE(iounit) qvhn(:,:,:,cm_index,:)
     3023
     3024
     3025
     3026!            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
     3027!            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
     3028!            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
     3029
     3030
    3723031
    3733032            ! 2d nested fields
     
    3933052            WRITE(iounit) vdepn(:,:,:,cm_index,:)
    3943053
     3054
     3055
     3056!            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
     3057!            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
     3058!            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
     3059
     3060
     3061
     3062
     3063
    3953064            ! Auxiliary variables for nests
    3963065            WRITE(iounit) xresoln(:)
     
    4013070            WRITE(iounit) yrn(:)
    4023071
     3072
     3073
     3074!            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
     3075!            PRINT *, 'SUM(xrn): ', SUM(xrn)
     3076
     3077
     3078
    4033079            ! Variables for polar stereographic projection
    4043080            WRITE(iounit) xglobal, sglobal, nglobal
     
    4063082            WRITE(iounit) southpolemap(:)
    4073083            WRITE(iounit) northpolemap(:)
     3084
     3085
     3086
     3087
     3088
     3089!            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
     3090!            PRINT *, 'xglobal: ', xglobal
     3091!            PRINT *, 'sglobal: ', sglobal
     3092!            PRINT *, 'nglobal: ', nglobal
     3093!            PRINT *, 'switchsouthg: ', switchsouthg
    4083094
    4093095            ! Variables declared in conv_mod (convection)
     
    4263112            WRITE(iounit) nconvlev, nconvtop
    4273113
     3114
     3115
     3116
     3117!            PRINT *, 'SUM(pconv): ', SUM(pconv)
     3118!            PRINT *, 'SUM(qconv): ', SUM(qconv)
     3119!            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
     3120!            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
     3121!            PRINT *, 'tt2conv: ', tt2conv
     3122!            PRINT *, 'nconvlev: ', nconvlev
     3123
     3124
     3125
    4283126        ELSE IF (op == 'LOAD') THEN
    4293127
     
    4313129            ! matches this version
    4323130            READ (iounit) temp_preproc_format_version_str
     3131
    4333132            PRINT *, 'Reading preprocessed file format version: ', &
    4343133&                    temp_preproc_format_version_str
    435 
    4363134            IF (TRIM(temp_preproc_format_version_str) == &
    4373135&                                        TRIM(PREPROC_FORMAT_VERSION_STR)) THEN
     
    4463144            END IF
    4473145
     3146
    4483147            ! Read the compiled max dimensions that were dumped from par_mod
    4493148            ! when creating the fp file, so that we can compare against
     
    4543153
    4553154
     3155
     3156
     3157
     3158            ! Get dimensions
    4563159            IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. &
    4573160&                   (temp_nzmax == nzmax) .AND. &
     
    4613164            ELSE
    4623165                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
    463                 ! PRINT *, ''
    4643166                PRINT *, '                  FP file     Compiled FP'
    4653167                PRINT *, 'nxmax:     ', temp_nxmax, '    ', nxmax
     
    4673169                PRINT *, 'nzmax:     ', temp_nzmax, '    ', nzmax
    4683170                PRINT *, 'nuvzmax:     ', temp_nuvzmax, '    ', nuvzmax
    469                 PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax
    470                 ! PRINT *, ''
     3171                PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax
    4713172                STOP
    4723173            END IF
     3174
     3175
    4733176
    4743177
     
    4783181            READ(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
    4793182
    480             ! Fixed fields, static in time
     3183
     3184
     3185
     3186
     3187            ! Fixed fields, static in time           
    4813188            READ(iounit) oro, excessoro, lsm, xlanduse, height
     3189
     3190
    4823191
    4833192            ! 3d fields
     
    4973206            READ(iounit) clouds(:,:,:,cm_index)
    4983207            READ(iounit) cloudsh(:,:,cm_index)
     3208
     3209
     3210!            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     3211!&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     3212
     3213
     3214!            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
     3215!&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
     3216
     3217
    4993218
    5003219            ! 2d fields
     
    5203239            READ(iounit) vdep(:,:,:,cm_index)
    5213240
     3241
     3242
     3243
     3244
     3245!            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
     3246!&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
     3247
     3248!            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
     3249!&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
     3250
     3251
     3252
     3253
    5223254            ! 1d fields
    5233255            READ(iounit) z0(:)
     
    5303262
    5313263
     3264
     3265!            PRINT *, 'SUM(bknew(1:nzmax)): ', &
     3266!&                                        SUM(bknew(1:nzmax))
     3267
     3268
     3269
     3270
     3271
    5323272            ! Nested, scalar values (for each nest)
    5333273            READ(iounit) nxn(:)
     
    5393279
    5403280
     3281
    5413282            ! Nested fields, static over time
    5423283            READ(iounit) oron, excessoron, lsmn, xlandusen
     3284
     3285
     3286
     3287!            PRINT *, 'SUM(oron): ', SUM(oron)
     3288
     3289
     3290
    5433291
    5443292            ! 3d nested fields
     
    5553303            READ(iounit) tthn(:,:,:,cm_index,:)
    5563304            READ(iounit) qvhn(:,:,:,cm_index,:)
     3305
     3306!            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
     3307!            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
     3308!            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
     3309
     3310
     3311
    5573312
    5583313            ! 2d nested fields
     
    5783333            READ(iounit) vdepn(:,:,:,cm_index,:)
    5793334
     3335!            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
     3336!            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
     3337!            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
     3338
     3339
     3340
    5803341            ! Auxiliary variables for nests
    5813342            READ(iounit) xresoln(:)
     
    5843345            READ(iounit) yln(:)
    5853346            READ(iounit) xrn(:)
    586             READ(iounit) yrn(:)
     3347
     3348
     3349!            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
     3350!            PRINT *, 'SUM(xrn): ', SUM(xrn)
     3351
     3352
    5873353
    5883354            ! Variables for polar stereographic projection
     
    5913357            READ(iounit) southpolemap(:)
    5923358            READ(iounit) northpolemap(:)
     3359
     3360
     3361!            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
     3362!            PRINT *, 'xglobal: ', xglobal
     3363!            PRINT *, 'sglobal: ', sglobal
     3364!            PRINT *, 'nglobal: ', nglobal
     3365!            PRINT *, 'switchsouthg: ', switchsouthg
     3366
     3367
     3368
    5933369
    5943370            ! Variables declared in conv_mod (convection)
     
    6113387            READ(iounit) nconvlev, nconvtop
    6123388
     3389
     3390
     3391
     3392
     3393!            PRINT *, 'SUM(pconv): ', SUM(pconv)
     3394!            PRINT *, 'SUM(qconv): ', SUM(qconv)
     3395!            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
     3396!            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
     3397!            PRINT *, 'tt2conv: ', tt2conv
     3398!            PRINT *, 'nconvlev: ', nconvlev
     3399
     3400
     3401
    6133402        ELSE
    614             STOP 'fpio(): Illegal operation'
     3403            STOP 'fpio_rawbin(): Illegal operation'
    6153404           
    6163405        ENDIF
    617     END SUBROUTINE fpio
    618 
    619     SUBROUTINE fpmetbinary_filetext(filename, cm_index)
    620 
    621         ! This is a utility subroutine meant to be used for testing purposes.
    622         ! It facilitates the text output of variables read in from the
    623         ! specified .fp file.  This routine will easily cause the program
    624         ! to crash due memory allocation issues, particularly when you are
    625         ! trying to text print 3d arrays in a single formatted statetment.
    626        
    627         CHARACTER(LEN=*), INTENT(IN) :: filename
    628         INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
    629                                                   ! most com_mod variables.
    630                                                   ! Should be 1 or 2
    631 
    632         !OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', status='REPLACE', &
    633         !    form="formatted", access="stream")
    634         OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', &
    635              form="formatted", access="APPEND")
    636 
    637         WRITE(IOUNIT_TEXTOUT, *) 'oro: ', oro
    638         WRITE(IOUNIT_TEXTOUT, *) 'excessoro: ', excessoro
    639         WRITE(IOUNIT_TEXTOUT, *) 'lsm: ', lsm
    640         WRITE(IOUNIT_TEXTOUT, *) 'xlanduse: ', xlanduse
    641         WRITE(IOUNIT_TEXTOUT, *) 'height: ', height
    642 
    643         WRITE(IOUNIT_TEXTOUT, *) 'uu: ', uu(:,:,:,cm_index)
    644         WRITE(IOUNIT_TEXTOUT, *) 'vv: ', vv(:,:,:,cm_index)
    645         WRITE(IOUNIT_TEXTOUT, *) 'uupol: ', uupol(:,:,:,cm_index)
    646         WRITE(IOUNIT_TEXTOUT, *) 'vvpol: ', vvpol(:,:,:,cm_index)
    647         WRITE(IOUNIT_TEXTOUT, *) 'ww: ', ww(:,:,:,cm_index)
    648         WRITE(IOUNIT_TEXTOUT, *) 'tt: ', tt(:,:,:,cm_index)
    649         WRITE(IOUNIT_TEXTOUT, *) 'qv: ', qv(:,:,:,cm_index)
    650         WRITE(IOUNIT_TEXTOUT, *) 'pv: ', pv(:,:,:,cm_index)
    651         WRITE(IOUNIT_TEXTOUT, *) 'rho: ', rho(:,:,:,cm_index)
    652         WRITE(IOUNIT_TEXTOUT, *) 'drhodz: ', drhodz(:,:,:,cm_index)
    653         WRITE(IOUNIT_TEXTOUT, *) 'tth: ', tth(:,:,:,cm_index)
    654         WRITE(IOUNIT_TEXTOUT, *) 'qvh: ', qvh(:,:,:,cm_index)
    655         WRITE(IOUNIT_TEXTOUT, *) 'pplev: ', pplev(:,:,:,cm_index)
    656         WRITE(IOUNIT_TEXTOUT, *) 'clouds: ', clouds(:,:,:,cm_index)
    657         WRITE(IOUNIT_TEXTOUT, *) 'cloudsh: ', cloudsh(:,:,cm_index)
    658 
    659 
    660 
    661 
    662         CLOSE(IOUNIT_TEXTOUT)
    663     END SUBROUTINE fpmetbinary_filetext
     3406    END SUBROUTINE fpio_rawbin
     3407
     3408
     3409
     3410
     3411    subroutine handle_nf90_err(status)
     3412
     3413        ! Custom routine for checking NF90 error status
     3414        ! and aborting if necessary
     3415        use netcdf
     3416        implicit none
     3417        integer, intent (in) :: status
     3418
     3419        if (status /= nf90_noerr) then
     3420            print *, trim(nf90_strerror(status))
     3421            stop "Stopped..."
     3422        endif
     3423    end subroutine handle_nf90_err
     3424
     3425
     3426    INTEGER FUNCTION logical2integer(logical_value)
     3427        IMPLICIT NONE
     3428
     3429        ! Auxiliary function to convert logical values to
     3430        ! integers.  THIS DOES NO TYPE CHECKING!!!
     3431
     3432
     3433        LOGICAL, INTENT(IN) :: logical_value
     3434
     3435        IF (logical_value .EQV. .TRUE.) THEN
     3436            logical2integer = 1
     3437        ELSE
     3438            logical2integer = 0
     3439        ENDIF
     3440
     3441        RETURN
     3442
     3443    END FUNCTION logical2integer
     3444
     3445
     3446    LOGICAL FUNCTION integer2logical(integer_value)
     3447        IMPLICIT NONE
     3448
     3449        ! Auxiliary function to convert integer values to
     3450        ! logical.  THIS DOES NO TYPE CHECKING!!!
     3451
     3452
     3453        INTEGER, INTENT(IN) :: integer_value
     3454
     3455        IF (integer_value .EQ. 0) THEN
     3456            integer2logical = .FALSE.
     3457        ELSE
     3458            integer2logical = .TRUE.
     3459        ENDIF
     3460
     3461        RETURN
     3462
     3463    END FUNCTION integer2logical
    6643464
    6653465
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG