source: flexpart.git/flexpart_code/fpmetbinary_mod.F90 @ ee13a7b

fp9.3.1-20161214-nc4
Last change on this file since ee13a7b was ee13a7b, checked in by Don Morton <Don.Morton@…>, 7 years ago

Incremental save to branch fp9.3.1-20161214-nc4

  • Property mode set to 100644
File size: 128.6 KB
Line 
1MODULE fpmetbinary_mod
2
3  !*****************************************************************************
4  !                                                                            *
5  !     Contains data and routines for dumping and loading processed met       *
6  !     fields.                                                                *
7  !     Authors Don Morton (Don.Morton@borealscicomp.com)                      *
8  !             Delia Arnold (deliona.arnold@gmail.com)                        *
9  !                                                                            *
10  !     07 Oct 2016                                                            *
11  !                                                                            *
12  !     Most of the data structures from com_mod.f90 that are dumped and       *
13  !     loaded have a final dimension of size two, so that they may hold data  *
14  !     from two met files.  When we dump the contents into a .fp file, we     *
15  !     need to specify which of the two to dump.  Likewise, when we load      *
16  !     from a .fp file, we need to specify which of the two possible indices  *
17  !     to load into.                                                          *
18  !                                                                            *
19  !     Note that these routines need more robustness.  For example, what      *
20  !     what happens if the filename can't be read or written.  Or, what       *
21  !     happens if a read or write fails in any way.  Right now, it's crash    *
22  !     city.                                                                  *
23  !                                                                            *
24  !     Recent enhancements (07 Oct 2016) DJM:                                 *
25  !                                                                            *
26  !     - file format changed so that compiled dimensions are output, and      *
27  !       during input these same dimensions are compared with the dimensions  *
28  !       compiled into the flexpart that is reading it.  A discrepancy        *
29  !       causes abort, so that time isn't wasted reading an incompatible      *
30  !       file.                                                                *
31  !                                                                            *
32  !     - file format changed so that first item is an 8-character string      *
33  !       depicting the version of the preprocessed file format.               *
34  !       An inconsistency between a detected and expected string results      *
35  !       in program abort.                                                    *
36  !                                                                            *
37  !       *** IMPORTANT *** - when the format of the preprocessed output is    *
38  !       modified in any way, be sure to change the version string below,     *
39  !       PREPROC_FORMAT_VERSION_STR, so that attempts to read the output      *
40  !       with a different format version will cause an abort.                 *
41  !                                                                            *
42  !*****************************************************************************
43
44    USE com_mod
45    USE conv_mod
46    USE par_mod, ONLY : nxmax, nymax, nzmax, nuvzmax, nwzmax, numclass, maxspec, &
47&                       maxnests, nxmaxn, nymaxn
48
49    USE netcdf
50
51    IMPLICIT NONE
52
53    ! Users may want to change these IO Unit values if they conflict with other parts
54    ! of code
55    INTEGER, PARAMETER :: IOUNIT_DUMP = 33, IOUNIT_LOAD = 34, &
56                          IOUNIT_TEXTOUT = 35
57
58    ! When a change is made to the format of the preprocessed file, such that
59    ! this routine will not be able to read a previous version, this version
60    ! string should be modified
61    CHARACTER(LEN=12), PARAMETER :: PREPROC_FORMAT_VERSION_STR = 'FP_p-9.3.1'//char(0)
62
63    PRIVATE IOUNIT_DUMP, IOUNIT_LOAD, IOUNIT_TEXTOUT, fpio,    &
64&           PREPROC_FORMAT_VERSION_STR
65
66
67CONTAINS
68
69  !*****************************************************************************
70  !                                                                            *
71  !    Subroutines fpmetbinary_dump() and fpmetbinary_load() provide the       *
72  !    public interface to                                                     *
73  !    this module functionality.  I created the PRIVATE fpio() because I      *
74  !    wanted all interactions with variables to be in one place.  The read    *
75  !    and write operations need to be done in exactly the same sequence, so   *
76  !    I felt like keeping them in the same routine would at least allow for   *
77  !    coders to more easily compare the two sequences than if they were       *
78  !    separate.                                                               *
79  !                                                                            *
80  !    As mentioned above, the dumps and loads will, for most variables,       *
81  !    need to refer to one of two index values for the last dimension of      *
82  !    the array.                                                              *
83  !                                                                            *
84  !*****************************************************************************
85
86
87    SUBROUTINE fpmetbinary_dump(filename, cm_index)
88        CHARACTER(LEN=*), INTENT(IN) :: filename  ! Full path for file
89        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
90                                                  ! most com_mod variables.
91                                                  ! Should be 1 or 2
92
93        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
94
95        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
96
97        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
98
99        ! Create and open NC4 file for writing
100        PRINT *, 'Opening NC4 file...'
101        ncretval = nf90_create(filename // ".nc4", &
102&                              OR(NF90_CLOBBER, NF90_HDF5), &
103&                              ncid)
104
105        OPEN(IOUNIT_DUMP, file=filename, action='WRITE', status='REPLACE', form="unformatted", access="stream")
106
107
108
109
110
111
112        CALL fpio(IOUNIT_DUMP, ncid, 'DUMP', cm_index)
113        CLOSE(IOUNIT_DUMP)
114
115        PRINT *, 'Closing NC4 file...'
116        ncretval = nf90_close(ncid)
117
118        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
119
120        !PRINT *, 'Dump walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
121    END SUBROUTINE fpmetbinary_dump
122
123    SUBROUTINE fpmetbinary_load(filename, cm_index)
124        CHARACTER(LEN=*), INTENT(IN) :: filename  ! Full path for file
125        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
126                                                  ! most com_mod variables.
127                                                  ! Should be 1 or 2
128
129        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
130
131        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
132
133        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
134
135        print *, "Opening nc file for reading"
136        ncretval = nf90_open(filename // ".nc4", NF90_NOWRITE, ncid)
137
138
139
140        OPEN(IOUNIT_LOAD, file=filename, action='READ', status='OLD', form="unformatted", access="stream")
141        CALL fpio(IOUNIT_LOAD, ncid, 'LOAD', cm_index)
142        CLOSE(IOUNIT_LOAD)
143        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
144        !PRINT *, 'Load walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
145    END SUBROUTINE fpmetbinary_load
146
147    SUBROUTINE fpmetbinary_zero(cm_index)
148        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
149                                                  ! most com_mod variables.
150                                                  ! Should be 1 or 2
151
152
153        ! Zeroes out, in local datastructures, the values dumped/loaded
154        ! This was written primarily as a testing mechanism.
155        ! DJM -- 17 February 2017 -- I don't think this routine has been used
156        ! for anything in recent past.  Might want to consider 86'ing it.
157        ! The lines here correspond to READ and WRITE in the dump/load routines
158
159        ! Scalar values
160        nx=0.0; ny=0.0; nxmin1=0.0; nymin1=0.0; nxfield=0.0
161        nuvz=0.0; nwz=0.0; nz=0.0; nmixz=0.0; nlev_ec=0.0
162        dx=0.0; dy=0.0; xlon0=0.0; ylat0=0.0; dxconst=0.0; dyconst=0.0
163
164        ! Fixed fields, static in time
165        oro=0.0; excessoro=0.0; lsm=0.0; xlanduse=0.0; height=0.0
166
167        ! 3d fields
168        uu(:,:,:,cm_index) = 0.0
169        vv(:,:,:,cm_index) = 0.0
170        uupol(:,:,:,cm_index) = 0.0
171        vvpol(:,:,:,cm_index) = 0.0
172        ww(:,:,:,cm_index) = 0.0
173        tt(:,:,:,cm_index) = 0.0
174        qv(:,:,:,cm_index) = 0.0
175        pv(:,:,:,cm_index) = 0.0
176        rho(:,:,:,cm_index) = 0.0
177        drhodz(:,:,:,cm_index) = 0.0
178        tth(:,:,:,cm_index) = 0.0
179        qvh(:,:,:,cm_index) = 0.0
180        pplev(:,:,:,cm_index) = 0.0
181        clouds(:,:,:,cm_index) = 0.0
182        cloudsh(:,:,cm_index) = 0.0
183
184        ! 2d fields
185        ps(:,:,:,cm_index) = 0.0
186        sd(:,:,:,cm_index) = 0.0
187        msl(:,:,:,cm_index) = 0.0
188        tcc(:,:,:,cm_index) = 0.0
189        u10(:,:,:,cm_index) = 0.0
190        v10(:,:,:,cm_index) = 0.0
191        tt2(:,:,:,cm_index) = 0.0
192        td2(:,:,:,cm_index) = 0.0
193        lsprec(:,:,:,cm_index) = 0.0
194        convprec(:,:,:,cm_index) = 0.0
195        sshf(:,:,:,cm_index) = 0.0
196        ssr(:,:,:,cm_index) = 0.0
197        surfstr(:,:,:,cm_index) = 0.0
198        ustar(:,:,:,cm_index) = 0.0
199        wstar(:,:,:,cm_index) = 0.0
200        hmix(:,:,:,cm_index) = 0.0
201        tropopause(:,:,:,cm_index) = 0.0
202        oli(:,:,:,cm_index) = 0.0
203        diffk(:,:,:,cm_index) = 0.0
204        vdep(:,:,:,cm_index) = 0.0
205
206        ! 1d fields
207        z0(:) = 0.0
208        akm(:) = 0.0
209        bkm(:) = 0.0
210        akz(:) = 0.0
211        bkz(:) = 0.0
212        aknew(:) = 0.0
213        bknew(:) = 0.0
214
215        ! Nested, scalar values (for each nest)
216        nxn(:) = 0.0
217        nyn(:) = 0.0
218        dxn(:) = 0.0
219        dyn(:) = 0.0
220        xlon0n(:) = 0.0
221        ylat0n(:) = 0.0
222
223        ! Nested fields, static in time
224        oron=0.0; excessoron=0.0; lsmn=0.0; xlandusen=0.0
225
226        ! 3d nested fields
227        uun(:,:,:,cm_index,:) = 0.0
228        wwn(:,:,:,cm_index,:) = 0.0
229        ttn(:,:,:,cm_index,:) = 0.0
230        qvn(:,:,:,cm_index,:) = 0.0
231        pvn(:,:,:,cm_index,:) = 0.0
232        cloudsn(:,:,:,cm_index,:) = 0.0
233        cloudsnh(:,:,cm_index,:) = 0.0
234        rhon(:,:,:,cm_index,:) = 0.0
235        drhodzn(:,:,:,cm_index,:) = 0.0
236        tthn(:,:,:,cm_index,:) = 0.0
237        qvhn(:,:,:,cm_index,:) = 0.0
238
239        ! 2d nested fields
240        psn(:,:,:,cm_index,:) = 0.0
241        sdn(:,:,:,cm_index,:) = 0.0
242        msln(:,:,:,cm_index,:) = 0.0
243        tccn(:,:,:,cm_index,:) = 0.0
244        u10n(:,:,:,cm_index,:) = 0.0
245        v10n(:,:,:,cm_index,:) = 0.0
246        tt2n(:,:,:,cm_index,:) = 0.0
247        td2n(:,:,:,cm_index,:) = 0.0
248        lsprecn(:,:,:,cm_index,:) = 0.0
249        convprecn(:,:,:,cm_index,:) = 0.0
250        sshfn(:,:,:,cm_index,:) = 0.0
251        ssrn(:,:,:,cm_index,:) = 0.0
252        surfstrn(:,:,:,cm_index,:) = 0.0
253        ustarn(:,:,:,cm_index,:) = 0.0
254        wstarn(:,:,:,cm_index,:) = 0.0
255        hmixn(:,:,:,cm_index,:) = 0.0
256        tropopausen(:,:,:,cm_index,:) = 0.0
257        olin(:,:,:,cm_index,:) = 0.0
258        diffkn(:,:,:,cm_index,:) = 0.0
259        vdepn(:,:,:,cm_index,:) = 0.0
260
261        ! Auxiliary variables for nests
262        xresoln(:) = 0.0
263        yresoln(:) = 0.0
264        xln(:) = 0.0
265        yln(:) = 0.0
266        xrn(:) = 0.0
267        yrn(:) = 0.0
268
269        ! Variables for polar stereographic projection
270        xglobal=.FALSE.; sglobal=.FALSE.; nglobal=.FALSE.
271        switchnorthg=0.0; switchsouthg=0.0
272        southpolemap(:) = 0.0
273        northpolemap(:) = 0.0
274
275        ! Variables declared in conv_mod (convection)
276        pconv(:) = 0.0
277        phconv(:) = 0.0
278        dpr(:) = 0.0
279        pconv_hpa(:) = 0.0
280        phconv_hpa(:) = 0.0
281        ft(:) = 0.0
282        fq(:) = 0.0
283        fmass(:,:) = 0.0
284        sub(:) = 0.0
285        fmassfrac(:,:) = 0.0
286        cbaseflux(:,:) = 0.0
287        cbasefluxn(:,:,:) = 0.0
288        tconv(:) = 0.0
289        qconv(:) = 0.0
290        qsconv(:) = 0.0
291        psconv=0.0; tt2conv=0.0; td2conv=0.0
292        nconvlev=0.0; nconvtop=0.0
293
294    END SUBROUTINE fpmetbinary_zero
295
296    SUBROUTINE fpio(iounit, ncid, op, cm_index)
297        IMPLICIT NONE
298        INTEGER, INTENT(IN) :: ncid               ! NetCDF file id
299        INTEGER, INTENT(IN) :: iounit
300        CHARACTER(LEN=4), INTENT(IN) :: op        ! Operation - DUMP or LOAD
301        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
302                                                  ! most com_mod variables.
303                                                  ! Should be 1 or 2
304
305
306        INTEGER :: ncret          ! Return value from NetCDF calls
307        INTEGER :: ncvarid          ! NetCDF variable ID
308
309        INTEGER :: nxmax_dimid, nymax_dimid, nzmax_dimid, nuvzmax_dimid, nwzmax_dimid, &
310&                  maxspec_dimid, numclass_dimid, maxnests_dimid, nxmaxn_dimid, nymaxn_dimid, &
311&                  zero_to_nzmax_dimid, zero_to_maxnests_dimid, polemap_dimid
312
313
314        INTEGER, DIMENSION(1) :: dim1dids    ! Dimension IDs for 1D arrays
315        INTEGER, DIMENSION(2) :: dim2dids    ! Dimension IDs for 2D arrays
316        INTEGER, DIMENSION(3) :: dim3dids    ! Dimension IDs for 3D arrays
317        INTEGER, DIMENSION(4) :: dim4dids    ! Dimension IDs for 4D arrays
318        INTEGER, DIMENSION(5) :: dim5dids    ! Dimension IDs for 5D arrays
319
320
321
322
323        ! These are used when loading in dimensions from NC file
324        CHARACTER(LEN=NF90_MAX_NAME) :: nxmax_dimname, nymax_dimname, nzmax_dimname, &
325&                                       nuvzmax_dimname, nwzmax_dimname,&
326&                                       maxspec_dimname, numclass_dimname,&
327&                                       maxnests_dimname, nxmaxn_dimname, nymaxn_dimname, &
328&                                       zero_to_nzmax_dimname, zero_to_maxnests_dimname, &
329&                                       polemap_dimname
330
331        ! These are temporary variables, used in the LOAD option, for
332        ! comparing against the current values in FLEXPART of nxmax, nymax, ...
333        INTEGER :: temp_nxmax, temp_nymax, temp_nzmax, &
334&                  temp_nuvzmax, temp_nwzmax, &
335&                  temp_maxspec, temp_numclass,&
336&                  temp_maxnests, temp_nxmaxn, temp_nymaxn
337
338        CHARACTER(LEN=12) :: temp_preproc_format_version_str
339
340        CHARACTER(LEN=128) :: errmesg
341
342        INTEGER, PARAMETER :: DEF_LEVEL = 3
343
344        if (op == 'DUMP') THEN
345
346
347            ! Write the preprocessing format version string
348            WRITE (iounit) PREPROC_FORMAT_VERSION_STR
349
350            ! Write the compiled max dimensions from par_mod - these are
351            ! not meant to be reassigned during a LOAD, but used as "header"
352            ! information to provide the structure of arrays
353            WRITE (iounit) nxmax, nymax, nzmax, nuvzmax, nwzmax
354
355            ncret = nf90_def_dim(ncid, 'nxmax', nxmax, nxmax_dimid)
356            call handle_nf90_err(ncret)
357            ncret = nf90_def_dim(ncid, 'nymax', nymax, nymax_dimid)
358            call handle_nf90_err(ncret)
359            ncret = nf90_def_dim(ncid, 'nzmax', nzmax, nzmax_dimid)
360            call handle_nf90_err(ncret)
361            ncret = nf90_def_dim(ncid, 'nuvzmax', nuvzmax, nuvzmax_dimid)
362            call handle_nf90_err(ncret)
363            ncret = nf90_def_dim(ncid, 'nwzmax', nwzmax, nwzmax_dimid)
364            call handle_nf90_err(ncret)
365            ncret = nf90_def_dim(ncid, 'maxspec', maxspec, maxspec_dimid)
366            call handle_nf90_err(ncret)
367            ncret = nf90_def_dim(ncid, 'numclass', numclass, numclass_dimid)
368            call handle_nf90_err(ncret)
369            ncret = nf90_def_dim(ncid, 'zero_to_nzmax', nzmax+1, zero_to_nzmax_dimid)
370            call handle_nf90_err(ncret)
371            ncret = nf90_def_dim(ncid, 'zero_to_maxnests', maxnests+1, zero_to_maxnests_dimid)
372            call handle_nf90_err(ncret)
373            ncret = nf90_def_dim(ncid, 'polemap_dim', 9, polemap_dimid)
374            call handle_nf90_err(ncret)
375
376            ! Scalar values
377            WRITE(iounit) nx, ny, nxmin1, nymin1, nxfield
378            WRITE(iounit) nuvz, nwz, nz, nmixz, nlev_ec
379            WRITE(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
380
381            ncret = nf90_def_var(ncid, 'nx', NF90_INT, ncvarid)
382            call handle_nf90_err(ncret)
383            ncret = nf90_put_var(ncid, ncvarid, nx)
384            call handle_nf90_err(ncret)
385
386            ncret = nf90_def_var(ncid, 'ny', NF90_INT, ncvarid)
387            call handle_nf90_err(ncret)
388            ncret = nf90_put_var(ncid, ncvarid, ny)
389            call handle_nf90_err(ncret)
390
391            ncret = nf90_def_var(ncid, 'nxmin1', NF90_INT, ncvarid)
392            call handle_nf90_err(ncret)
393            ncret = nf90_put_var(ncid, ncvarid, nxmin1)
394            call handle_nf90_err(ncret)
395
396            ncret = nf90_def_var(ncid, 'nymin1', NF90_INT, ncvarid)
397            call handle_nf90_err(ncret)
398            ncret = nf90_put_var(ncid, ncvarid, nymin1)
399            call handle_nf90_err(ncret)
400
401            ncret = nf90_def_var(ncid, 'nxfield', NF90_INT, ncvarid)
402            call handle_nf90_err(ncret)
403            ncret = nf90_put_var(ncid, ncvarid, nxfield)
404            call handle_nf90_err(ncret)
405
406            ncret = nf90_def_var(ncid, 'nuvz', NF90_INT, ncvarid)
407            call handle_nf90_err(ncret)
408            ncret = nf90_put_var(ncid, ncvarid, nuvz)
409            call handle_nf90_err(ncret)
410
411            ncret = nf90_def_var(ncid, 'nwz', NF90_INT, ncvarid)
412            call handle_nf90_err(ncret)
413            ncret = nf90_put_var(ncid, ncvarid, nwz)
414            call handle_nf90_err(ncret)
415
416            ncret = nf90_def_var(ncid, 'nz', NF90_INT, ncvarid)
417            call handle_nf90_err(ncret)
418            ncret = nf90_put_var(ncid, ncvarid, nz)
419            call handle_nf90_err(ncret)
420
421            ncret = nf90_def_var(ncid, 'nmixz', NF90_INT, ncvarid)
422            call handle_nf90_err(ncret)
423            ncret = nf90_put_var(ncid, ncvarid, nmixz)
424            call handle_nf90_err(ncret)
425
426            ncret = nf90_def_var(ncid, 'nlev_ec', NF90_INT, ncvarid)
427            call handle_nf90_err(ncret)
428            ncret = nf90_put_var(ncid, ncvarid, nlev_ec)
429            call handle_nf90_err(ncret)
430
431            ncret = nf90_def_var(ncid, 'dx', NF90_FLOAT, ncvarid)
432            call handle_nf90_err(ncret)
433            ncret = nf90_put_var(ncid, ncvarid, dx)
434            call handle_nf90_err(ncret)
435
436            ncret = nf90_def_var(ncid, 'dy', NF90_FLOAT, ncvarid)
437            call handle_nf90_err(ncret)
438            ncret = nf90_put_var(ncid, ncvarid, dy)
439            call handle_nf90_err(ncret)
440
441            ncret = nf90_def_var(ncid, 'xlon0', NF90_FLOAT, ncvarid)
442            call handle_nf90_err(ncret)
443            ncret = nf90_put_var(ncid, ncvarid, xlon0)
444            call handle_nf90_err(ncret)
445
446            ncret = nf90_def_var(ncid, 'ylat0', NF90_FLOAT, ncvarid)
447            call handle_nf90_err(ncret)
448            ncret = nf90_put_var(ncid, ncvarid, ylat0)
449            call handle_nf90_err(ncret)
450
451            ncret = nf90_def_var(ncid, 'dxconst', NF90_FLOAT, ncvarid)
452            call handle_nf90_err(ncret)
453            ncret = nf90_put_var(ncid, ncvarid, dxconst)
454            call handle_nf90_err(ncret)
455
456            ncret = nf90_def_var(ncid, 'dyconst', NF90_FLOAT, ncvarid)
457            call handle_nf90_err(ncret)
458            ncret = nf90_put_var(ncid, ncvarid, dyconst)
459            call handle_nf90_err(ncret)
460
461
462
463            ! Fixed fields, static in time
464            WRITE(iounit) oro, excessoro, lsm, xlanduse, height
465
466            dim2dids = (/nxmax_dimid, nymax_dimid/)
467
468            ncret = nf90_def_var(ncid, 'oro', NF90_FLOAT, &
469&                                       dim2dids, ncvarid)
470            call handle_nf90_err(ncret)
471            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
472&                                        shuffle=0,     &
473&                                        deflate=1,     &
474&                                        deflate_level=DEF_LEVEL)
475            call handle_nf90_err(ncret)
476            ncret = nf90_put_var(ncid, ncvarid, &
477&                                oro(0:nxmax-1, 0:nymax-1))
478            call handle_nf90_err(ncret)
479
480            ncret = nf90_def_var(ncid, 'excessoro', NF90_FLOAT, &
481&                                       dim2dids, ncvarid)
482            call handle_nf90_err(ncret)
483            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
484&                                        shuffle=0,     &
485&                                        deflate=1,     &
486&                                        deflate_level=DEF_LEVEL)
487            call handle_nf90_err(ncret)
488            ncret = nf90_put_var(ncid, ncvarid, &
489&                                excessoro(0:nxmax-1, 0:nymax-1))
490            call handle_nf90_err(ncret)
491
492            ncret = nf90_def_var(ncid, 'lsm', NF90_FLOAT, &
493&                                       dim2dids, ncvarid)
494            call handle_nf90_err(ncret)
495            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
496&                                        shuffle=0,     &
497&                                        deflate=1,     &
498&                                        deflate_level=DEF_LEVEL)
499            call handle_nf90_err(ncret)
500            ncret = nf90_put_var(ncid, ncvarid, &
501&                                lsm(0:nxmax-1, 0:nymax-1))
502            call handle_nf90_err(ncret)
503
504            dim3dids = (/nxmax_dimid, nymax_dimid, numclass_dimid/)
505            ! numclass comes from par_mod - number of land use classes
506            ncret = nf90_def_var(ncid, 'xlanduse', NF90_FLOAT, &
507&                                       dim3dids, ncvarid)
508            call handle_nf90_err(ncret)
509            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
510&                                        shuffle=0,     &
511&                                        deflate=1,     &
512&                                        deflate_level=DEF_LEVEL)
513            call handle_nf90_err(ncret)
514            ncret = nf90_put_var(ncid, ncvarid, &
515&                                xlanduse(0:nxmax-1, 0:nymax-1, 1:numclass))
516            call handle_nf90_err(ncret)
517
518            dim1dids = (/nzmax_dimid/)
519            ncret = nf90_def_var(ncid, 'height', NF90_FLOAT, &
520&                                       dim1dids, ncvarid)
521            call handle_nf90_err(ncret)
522            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
523&                                        shuffle=0,     &
524&                                        deflate=1,     &
525&                                        deflate_level=DEF_LEVEL)
526            call handle_nf90_err(ncret)
527            ncret = nf90_put_var(ncid, ncvarid, &
528&                                height(1:nzmax))
529            call handle_nf90_err(ncret)
530
531
532
533
534            ! 3d fields
535            WRITE(iounit) uu(:,:,:,cm_index)
536            WRITE(iounit) vv(:,:,:,cm_index)
537            WRITE(iounit) uupol(:,:,:,cm_index)
538            WRITE(iounit) vvpol(:,:,:,cm_index)
539            WRITE(iounit) ww(:,:,:,cm_index)
540            WRITE(iounit) tt(:,:,:,cm_index)
541            WRITE(iounit) qv(:,:,:,cm_index)
542            WRITE(iounit) pv(:,:,:,cm_index)
543            WRITE(iounit) rho(:,:,:,cm_index)
544            WRITE(iounit) drhodz(:,:,:,cm_index)
545            WRITE(iounit) tth(:,:,:,cm_index)
546            WRITE(iounit) qvh(:,:,:,cm_index)
547            WRITE(iounit) pplev(:,:,:,cm_index)
548            WRITE(iounit) clouds(:,:,:,cm_index)
549            WRITE(iounit) cloudsh(:,:,cm_index)
550
551            dim3dids = (/nxmax_dimid, nymax_dimid, nzmax_dimid/)
552
553            ncret = nf90_def_var(ncid, 'uu', NF90_FLOAT, &
554&                                       dim3dids, ncvarid)
555            call handle_nf90_err(ncret)
556            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
557&                                        shuffle=0,     &
558&                                        deflate=1,     &
559&                                        deflate_level=DEF_LEVEL)
560            call handle_nf90_err(ncret)
561            ncret = nf90_put_var(ncid, ncvarid, &
562&                                uu(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
563            call handle_nf90_err(ncret)
564
565            ncret = nf90_def_var(ncid, 'vv', NF90_FLOAT, &
566&                                       dim3dids, ncvarid)
567            call handle_nf90_err(ncret)
568            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
569&                                        shuffle=0,     &
570&                                        deflate=1,     &
571&                                        deflate_level=DEF_LEVEL)
572            call handle_nf90_err(ncret)
573            ncret = nf90_put_var(ncid, ncvarid, &
574&                                vv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
575            call handle_nf90_err(ncret)
576
577            ncret = nf90_def_var(ncid, 'uupol', NF90_FLOAT, &
578&                                       dim3dids, ncvarid)
579            call handle_nf90_err(ncret)
580            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
581&                                        shuffle=0,     &
582&                                        deflate=1,     &
583&                                        deflate_level=DEF_LEVEL)
584            call handle_nf90_err(ncret)
585            ncret = nf90_put_var(ncid, ncvarid, &
586&                                uupol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
587            call handle_nf90_err(ncret)
588
589            ncret = nf90_def_var(ncid, 'vvpol', NF90_FLOAT, &
590&                                       dim3dids, ncvarid)
591            call handle_nf90_err(ncret)
592            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
593&                                        shuffle=0,     &
594&                                        deflate=1,     &
595&                                        deflate_level=DEF_LEVEL)
596            call handle_nf90_err(ncret)
597            ncret = nf90_put_var(ncid, ncvarid, &
598&                                vvpol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
599            call handle_nf90_err(ncret)
600
601            ncret = nf90_def_var(ncid, 'ww', NF90_FLOAT, &
602&                                       dim3dids, ncvarid)
603            call handle_nf90_err(ncret)
604            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
605&                                        shuffle=0,     &
606&                                        deflate=1,     &
607&                                        deflate_level=DEF_LEVEL)
608            call handle_nf90_err(ncret)
609            ncret = nf90_put_var(ncid, ncvarid, &
610&                                ww(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
611            call handle_nf90_err(ncret)
612
613            ncret = nf90_def_var(ncid, 'tt', NF90_FLOAT, &
614&                                       dim3dids, ncvarid)
615            call handle_nf90_err(ncret)
616            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
617&                                        shuffle=0,     &
618&                                        deflate=1,     &
619&                                        deflate_level=DEF_LEVEL)
620            call handle_nf90_err(ncret)
621            ncret = nf90_put_var(ncid, ncvarid, &
622&                                tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
623            call handle_nf90_err(ncret)
624
625            ncret = nf90_def_var(ncid, 'qv', NF90_FLOAT, &
626&                                       dim3dids, ncvarid)
627            call handle_nf90_err(ncret)
628            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
629&                                        shuffle=0,     &
630&                                        deflate=1,     &
631&                                        deflate_level=DEF_LEVEL)
632            call handle_nf90_err(ncret)
633            ncret = nf90_put_var(ncid, ncvarid, &
634&                                qv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
635            call handle_nf90_err(ncret)
636
637            ncret = nf90_def_var(ncid, 'pv', NF90_FLOAT, &
638&                                       dim3dids, ncvarid)
639            call handle_nf90_err(ncret)
640            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
641&                                        shuffle=0,     &
642&                                        deflate=1,     &
643&                                        deflate_level=DEF_LEVEL)
644            call handle_nf90_err(ncret)
645            ncret = nf90_put_var(ncid, ncvarid, &
646&                                pv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
647            call handle_nf90_err(ncret)
648
649            ncret = nf90_def_var(ncid, 'rho', NF90_FLOAT, &
650&                                       dim3dids, ncvarid)
651            call handle_nf90_err(ncret)
652            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
653&                                        shuffle=0,     &
654&                                        deflate=1,     &
655&                                        deflate_level=DEF_LEVEL)
656            call handle_nf90_err(ncret)
657            ncret = nf90_put_var(ncid, ncvarid, &
658&                                rho(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
659            call handle_nf90_err(ncret)
660
661            ncret = nf90_def_var(ncid, 'drhodz', NF90_FLOAT, &
662&                                       dim3dids, ncvarid)
663            call handle_nf90_err(ncret)
664            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
665&                                        shuffle=0,     &
666&                                        deflate=1,     &
667&                                        deflate_level=DEF_LEVEL)
668            call handle_nf90_err(ncret)
669            ncret = nf90_put_var(ncid, ncvarid, &
670&                                drhodz(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
671            call handle_nf90_err(ncret)
672
673            ncret = nf90_def_var(ncid, 'clouds', NF90_BYTE, &
674&                                       dim3dids, ncvarid)
675            call handle_nf90_err(ncret)
676            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
677&                                        shuffle=0,     &
678&                                        deflate=1,     &
679&                                        deflate_level=DEF_LEVEL)
680            call handle_nf90_err(ncret)
681            ncret = nf90_put_var(ncid, ncvarid, &
682&                                clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
683            call handle_nf90_err(ncret)
684
685
686
687            ! Note the change in z dimension for the following
688            dim3dids = (/nxmax_dimid, nymax_dimid, nuvzmax_dimid/)
689
690            ncret = nf90_def_var(ncid, 'tth', NF90_FLOAT, &
691&                                       dim3dids, ncvarid)
692            call handle_nf90_err(ncret)
693            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
694&                                        shuffle=0,     &
695&                                        deflate=1,     &
696&                                        deflate_level=DEF_LEVEL)
697            call handle_nf90_err(ncret)
698            ncret = nf90_put_var(ncid, ncvarid, &
699&                                tth(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
700            call handle_nf90_err(ncret)
701
702            ncret = nf90_def_var(ncid, 'qvh', NF90_FLOAT, &
703&                                       dim3dids, ncvarid)
704            call handle_nf90_err(ncret)
705            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
706&                                        shuffle=0,     &
707&                                        deflate=1,     &
708&                                        deflate_level=DEF_LEVEL)
709            call handle_nf90_err(ncret)
710            ncret = nf90_put_var(ncid, ncvarid, &
711&                                qvh(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
712            call handle_nf90_err(ncret)
713
714            ncret = nf90_def_var(ncid, 'pplev', NF90_FLOAT, &
715&                                       dim3dids, ncvarid)
716            call handle_nf90_err(ncret)
717            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
718&                                        shuffle=0,     &
719&                                        deflate=1,     &
720&                                        deflate_level=DEF_LEVEL)
721            call handle_nf90_err(ncret)
722            ncret = nf90_put_var(ncid, ncvarid, &
723&                                pplev(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
724            call handle_nf90_err(ncret)
725
726
727            dim2dids = (/nxmax_dimid, nymax_dimid/)
728            ncret = nf90_def_var(ncid, 'cloudsh', NF90_INT, &
729&                                       dim2dids, ncvarid)
730            call handle_nf90_err(ncret)
731            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
732&                                        shuffle=0,     &
733&                                        deflate=1,     &
734&                                        deflate_level=DEF_LEVEL)
735            call handle_nf90_err(ncret)
736            ncret = nf90_put_var(ncid, ncvarid, &
737&                                cloudsh(0:nxmax-1, 0:nymax-1, cm_index))
738            call handle_nf90_err(ncret)
739
740
741
742            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
743&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
744
745            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
746&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
747
748
749
750            ! 2d fields
751            WRITE(iounit) ps(:,:,:,cm_index)
752            WRITE(iounit) sd(:,:,:,cm_index)
753            WRITE(iounit) msl(:,:,:,cm_index)
754            WRITE(iounit) tcc(:,:,:,cm_index)
755            WRITE(iounit) u10(:,:,:,cm_index)
756            WRITE(iounit) v10(:,:,:,cm_index)
757            WRITE(iounit) tt2(:,:,:,cm_index)
758            WRITE(iounit) td2(:,:,:,cm_index)
759            WRITE(iounit) lsprec(:,:,:,cm_index)
760            WRITE(iounit) convprec(:,:,:,cm_index)
761            WRITE(iounit) sshf(:,:,:,cm_index)
762            WRITE(iounit) ssr(:,:,:,cm_index)
763            WRITE(iounit) surfstr(:,:,:,cm_index)
764            WRITE(iounit) ustar(:,:,:,cm_index)
765            WRITE(iounit) wstar(:,:,:,cm_index)
766            WRITE(iounit) hmix(:,:,:,cm_index)
767            WRITE(iounit) tropopause(:,:,:,cm_index)
768            WRITE(iounit) oli(:,:,:,cm_index)
769            WRITE(iounit) diffk(:,:,:,cm_index)
770            WRITE(iounit) vdep(:,:,:,cm_index)
771
772            dim2dids = (/nxmax_dimid, nymax_dimid/)
773
774            ncret = nf90_def_var(ncid, 'ps', NF90_FLOAT, &
775&                                       dim2dids, ncvarid)
776            call handle_nf90_err(ncret)
777            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
778&                                        shuffle=0,     &
779&                                        deflate=1,     &
780&                                        deflate_level=DEF_LEVEL)
781            call handle_nf90_err(ncret)
782            ncret = nf90_put_var(ncid, ncvarid, &
783&                                ps(0:nxmax-1, 0:nymax-1, 1, cm_index))
784            call handle_nf90_err(ncret)
785
786            ncret = nf90_def_var(ncid, 'sd', NF90_FLOAT, &
787&                                       dim2dids, ncvarid)
788            call handle_nf90_err(ncret)
789            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
790&                                        shuffle=0,     &
791&                                        deflate=1,     &
792&                                        deflate_level=DEF_LEVEL)
793            call handle_nf90_err(ncret)
794            ncret = nf90_put_var(ncid, ncvarid, &
795&                                sd(0:nxmax-1, 0:nymax-1, 1, cm_index))
796            call handle_nf90_err(ncret)
797
798            ncret = nf90_def_var(ncid, 'msl', NF90_FLOAT, &
799&                                       dim2dids, ncvarid)
800            call handle_nf90_err(ncret)
801            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
802&                                        shuffle=0,     &
803&                                        deflate=1,     &
804&                                        deflate_level=DEF_LEVEL)
805            call handle_nf90_err(ncret)
806            ncret = nf90_put_var(ncid, ncvarid, &
807&                                msl(0:nxmax-1, 0:nymax-1, 1, cm_index))
808            call handle_nf90_err(ncret)
809
810            ncret = nf90_def_var(ncid, 'tcc', NF90_FLOAT, &
811&                                       dim2dids, ncvarid)
812            call handle_nf90_err(ncret)
813            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
814&                                        shuffle=0,     &
815&                                        deflate=1,     &
816&                                        deflate_level=DEF_LEVEL)
817            call handle_nf90_err(ncret)
818            ncret = nf90_put_var(ncid, ncvarid, &
819&                                tcc(0:nxmax-1, 0:nymax-1, 1, cm_index))
820            call handle_nf90_err(ncret)
821
822            ncret = nf90_def_var(ncid, 'u10', NF90_FLOAT, &
823&                                       dim2dids, ncvarid)
824            call handle_nf90_err(ncret)
825            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
826&                                        shuffle=0,     &
827&                                        deflate=1,     &
828&                                        deflate_level=DEF_LEVEL)
829            call handle_nf90_err(ncret)
830            ncret = nf90_put_var(ncid, ncvarid, &
831&                                u10(0:nxmax-1, 0:nymax-1, 1, cm_index))
832            call handle_nf90_err(ncret)
833
834            ncret = nf90_def_var(ncid, 'v10', NF90_FLOAT, &
835&                                       dim2dids, ncvarid)
836            call handle_nf90_err(ncret)
837            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
838&                                        shuffle=0,     &
839&                                        deflate=1,     &
840&                                        deflate_level=DEF_LEVEL)
841            call handle_nf90_err(ncret)
842            ncret = nf90_put_var(ncid, ncvarid, &
843&                                v10(0:nxmax-1, 0:nymax-1, 1, cm_index))
844            call handle_nf90_err(ncret)
845
846            ncret = nf90_def_var(ncid, 'tt2', NF90_FLOAT, &
847&                                       dim2dids, ncvarid)
848            call handle_nf90_err(ncret)
849            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
850&                                        shuffle=0,     &
851&                                        deflate=1,     &
852&                                        deflate_level=DEF_LEVEL)
853            call handle_nf90_err(ncret)
854            ncret = nf90_put_var(ncid, ncvarid, &
855&                                tt2(0:nxmax-1, 0:nymax-1, 1, cm_index))
856            call handle_nf90_err(ncret)
857
858            ncret = nf90_def_var(ncid, 'td2', NF90_FLOAT, &
859&                                       dim2dids, ncvarid)
860            call handle_nf90_err(ncret)
861            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
862&                                        shuffle=0,     &
863&                                        deflate=1,     &
864&                                        deflate_level=DEF_LEVEL)
865            call handle_nf90_err(ncret)
866            ncret = nf90_put_var(ncid, ncvarid, &
867&                                td2(0:nxmax-1, 0:nymax-1, 1, cm_index))
868            call handle_nf90_err(ncret)
869
870            ncret = nf90_def_var(ncid, 'lsprec', NF90_FLOAT, &
871&                                       dim2dids, ncvarid)
872            call handle_nf90_err(ncret)
873            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
874&                                        shuffle=0,     &
875&                                        deflate=1,     &
876&                                        deflate_level=DEF_LEVEL)
877            call handle_nf90_err(ncret)
878            ncret = nf90_put_var(ncid, ncvarid, &
879&                                lsprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
880            call handle_nf90_err(ncret)
881
882            ncret = nf90_def_var(ncid, 'convprec', NF90_FLOAT, &
883&                                       dim2dids, ncvarid)
884            call handle_nf90_err(ncret)
885            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
886&                                        shuffle=0,     &
887&                                        deflate=1,     &
888&                                        deflate_level=DEF_LEVEL)
889            call handle_nf90_err(ncret)
890            ncret = nf90_put_var(ncid, ncvarid, &
891&                                convprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
892            call handle_nf90_err(ncret)
893
894            ncret = nf90_def_var(ncid, 'sshf', NF90_FLOAT, &
895&                                       dim2dids, ncvarid)
896            call handle_nf90_err(ncret)
897            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
898&                                        shuffle=0,     &
899&                                        deflate=1,     &
900&                                        deflate_level=DEF_LEVEL)
901            call handle_nf90_err(ncret)
902            ncret = nf90_put_var(ncid, ncvarid, &
903&                                sshf(0:nxmax-1, 0:nymax-1, 1, cm_index))
904            call handle_nf90_err(ncret)
905
906            ncret = nf90_def_var(ncid, 'ssr', NF90_FLOAT, &
907&                                       dim2dids, ncvarid)
908            call handle_nf90_err(ncret)
909            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
910&                                        shuffle=0,     &
911&                                        deflate=1,     &
912&                                        deflate_level=DEF_LEVEL)
913            call handle_nf90_err(ncret)
914            ncret = nf90_put_var(ncid, ncvarid, &
915&                                ssr(0:nxmax-1, 0:nymax-1, 1, cm_index))
916            call handle_nf90_err(ncret)
917
918            ncret = nf90_def_var(ncid, 'surfstr', NF90_FLOAT, &
919&                                       dim2dids, ncvarid)
920            call handle_nf90_err(ncret)
921            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
922&                                        shuffle=0,     &
923&                                        deflate=1,     &
924&                                        deflate_level=DEF_LEVEL)
925            call handle_nf90_err(ncret)
926            ncret = nf90_put_var(ncid, ncvarid, &
927&                                surfstr(0:nxmax-1, 0:nymax-1, 1, cm_index))
928            call handle_nf90_err(ncret)
929
930            ncret = nf90_def_var(ncid, 'ustar', NF90_FLOAT, &
931&                                       dim2dids, ncvarid)
932            call handle_nf90_err(ncret)
933            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
934&                                        shuffle=0,     &
935&                                        deflate=1,     &
936&                                        deflate_level=DEF_LEVEL)
937            call handle_nf90_err(ncret)
938            ncret = nf90_put_var(ncid, ncvarid, &
939&                                ustar(0:nxmax-1, 0:nymax-1, 1, cm_index))
940            call handle_nf90_err(ncret)
941
942            ncret = nf90_def_var(ncid, 'wstar', NF90_FLOAT, &
943&                                       dim2dids, ncvarid)
944            call handle_nf90_err(ncret)
945            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
946&                                        shuffle=0,     &
947&                                        deflate=1,     &
948&                                        deflate_level=DEF_LEVEL)
949            call handle_nf90_err(ncret)
950            ncret = nf90_put_var(ncid, ncvarid, &
951&                                wstar(0:nxmax-1, 0:nymax-1, 1, cm_index))
952            call handle_nf90_err(ncret)
953
954            ncret = nf90_def_var(ncid, 'hmix', NF90_FLOAT, &
955&                                       dim2dids, ncvarid)
956            call handle_nf90_err(ncret)
957            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
958&                                        shuffle=0,     &
959&                                        deflate=1,     &
960&                                        deflate_level=DEF_LEVEL)
961            call handle_nf90_err(ncret)
962            ncret = nf90_put_var(ncid, ncvarid, &
963&                                hmix(0:nxmax-1, 0:nymax-1, 1, cm_index))
964            call handle_nf90_err(ncret)
965
966            ncret = nf90_def_var(ncid, 'tropopause', NF90_FLOAT, &
967&                                       dim2dids, ncvarid)
968            call handle_nf90_err(ncret)
969            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
970&                                        shuffle=0,     &
971&                                        deflate=1,     &
972&                                        deflate_level=DEF_LEVEL)
973            call handle_nf90_err(ncret)
974            ncret = nf90_put_var(ncid, ncvarid, &
975&                                tropopause(0:nxmax-1, 0:nymax-1, 1, cm_index))
976            call handle_nf90_err(ncret)
977
978            ncret = nf90_def_var(ncid, 'oli', NF90_FLOAT, &
979&                                       dim2dids, ncvarid)
980            call handle_nf90_err(ncret)
981            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
982&                                        shuffle=0,     &
983&                                        deflate=1,     &
984&                                        deflate_level=DEF_LEVEL)
985            call handle_nf90_err(ncret)
986            ncret = nf90_put_var(ncid, ncvarid, &
987&                                oli(0:nxmax-1, 0:nymax-1, 1, cm_index))
988            call handle_nf90_err(ncret)
989
990            ncret = nf90_def_var(ncid, 'diffk', NF90_FLOAT, &
991&                                       dim2dids, ncvarid)
992            call handle_nf90_err(ncret)
993            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
994&                                        shuffle=0,     &
995&                                        deflate=1,     &
996&                                        deflate_level=DEF_LEVEL)
997            call handle_nf90_err(ncret)
998            ncret = nf90_put_var(ncid, ncvarid, &
999&                                diffk(0:nxmax-1, 0:nymax-1, 1, cm_index))
1000            call handle_nf90_err(ncret)
1001
1002
1003
1004            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
1005&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
1006
1007            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
1008&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
1009
1010
1011            dim3dids = (/nxmax_dimid, nymax_dimid, maxspec_dimid/)
1012
1013            ncret = nf90_def_var(ncid, 'vdep', NF90_FLOAT, &
1014&                                       dim3dids, ncvarid)
1015            call handle_nf90_err(ncret)
1016            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1017&                                        shuffle=0,     &
1018&                                        deflate=1,     &
1019&                                        deflate_level=DEF_LEVEL)
1020            call handle_nf90_err(ncret)
1021            ncret = nf90_put_var(ncid, ncvarid, &
1022&                                vdep(0:nxmax-1, 0:nymax-1, 1:maxspec, cm_index))
1023            call handle_nf90_err(ncret)
1024
1025
1026
1027            ! 1d fields
1028            WRITE(iounit) z0(:)
1029            WRITE(iounit) akm(:)
1030            WRITE(iounit) bkm(:)
1031            WRITE(iounit) akz(:)
1032            WRITE(iounit) bkz(:)
1033            WRITE(iounit) aknew(:)
1034            WRITE(iounit) bknew(:)
1035
1036            dim1dids = (/numclass_dimid/)
1037
1038            ncret = nf90_def_var(ncid, 'z0', NF90_FLOAT, &
1039&                                       dim1dids, ncvarid)
1040            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1041&                                        shuffle=0,     &
1042&                                        deflate=1,     &
1043&                                        deflate_level=DEF_LEVEL)
1044            ncret = nf90_put_var(ncid, ncvarid, &
1045&                                z0(1:numclass))
1046
1047
1048            dim1dids = (/nwzmax_dimid/)
1049
1050            ncret = nf90_def_var(ncid, 'akm', NF90_FLOAT, &
1051&                                       dim1dids, ncvarid)
1052            call handle_nf90_err(ncret)
1053            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1054&                                        shuffle=0,     &
1055&                                        deflate=1,     &
1056&                                        deflate_level=DEF_LEVEL)
1057            call handle_nf90_err(ncret)
1058            ncret = nf90_put_var(ncid, ncvarid, &
1059&                                akm(1:nwzmax))
1060            call handle_nf90_err(ncret)
1061
1062            ncret = nf90_def_var(ncid, 'bkm', NF90_FLOAT, &
1063&                                       dim1dids, ncvarid)
1064            call handle_nf90_err(ncret)
1065            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1066&                                        shuffle=0,     &
1067&                                        deflate=1,     &
1068&                                        deflate_level=DEF_LEVEL)
1069            call handle_nf90_err(ncret)
1070            ncret = nf90_put_var(ncid, ncvarid, &
1071&                                bkm(1:nwzmax))
1072            call handle_nf90_err(ncret)
1073
1074
1075            dim1dids = (/nuvzmax_dimid/)
1076
1077            ncret = nf90_def_var(ncid, 'akz', NF90_FLOAT, &
1078&                                       dim1dids, ncvarid)
1079            call handle_nf90_err(ncret)
1080            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1081&                                        shuffle=0,     &
1082&                                        deflate=1,     &
1083&                                        deflate_level=DEF_LEVEL)
1084            call handle_nf90_err(ncret)
1085            ncret = nf90_put_var(ncid, ncvarid, &
1086&                                akz(1:nuvzmax))
1087            call handle_nf90_err(ncret)
1088
1089            ncret = nf90_def_var(ncid, 'bkz', NF90_FLOAT, &
1090&                                       dim1dids, ncvarid)
1091            call handle_nf90_err(ncret)
1092            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1093&                                        shuffle=0,     &
1094&                                        deflate=1,     &
1095&                                        deflate_level=DEF_LEVEL)
1096            call handle_nf90_err(ncret)
1097            ncret = nf90_put_var(ncid, ncvarid, &
1098&                                bkz(1:nuvzmax))
1099            call handle_nf90_err(ncret)
1100
1101
1102            dim1dids = (/nzmax_dimid/)
1103
1104            ncret = nf90_def_var(ncid, 'aknew', NF90_FLOAT, &
1105&                                       dim1dids, ncvarid)
1106            call handle_nf90_err(ncret)
1107            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1108&                                        shuffle=0,     &
1109&                                        deflate=1,     &
1110&                                        deflate_level=DEF_LEVEL)
1111            call handle_nf90_err(ncret)
1112            ncret = nf90_put_var(ncid, ncvarid, &
1113&                                aknew(1:nzmax))
1114            call handle_nf90_err(ncret)
1115
1116            ncret = nf90_def_var(ncid, 'bknew', NF90_FLOAT, &
1117&                                       dim1dids, ncvarid)
1118            call handle_nf90_err(ncret)
1119            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1120&                                        shuffle=0,     &
1121&                                        deflate=1,     &
1122&                                        deflate_level=DEF_LEVEL)
1123            call handle_nf90_err(ncret)
1124            ncret = nf90_put_var(ncid, ncvarid, &
1125&                                bknew(1:nzmax))
1126            call handle_nf90_err(ncret)
1127
1128
1129            PRINT *, 'SUM(bknew(1:nzmax)): ', &
1130&                                        SUM(bknew(1:nzmax))
1131
1132
1133
1134            ! Getting ready to add in nested code
1135
1136            ! These are compiled max dimensions from par_mod - these are
1137            ! not meant to be reassigned during a LOAD, but used as "header"
1138            ! information to provide the structure of arrays
1139            ncret = nf90_def_dim(ncid, 'maxnests', maxnests, maxnests_dimid)
1140            call handle_nf90_err(ncret)
1141            ncret = nf90_def_dim(ncid, 'nxmaxn', nxmaxn, nxmaxn_dimid)
1142            call handle_nf90_err(ncret)
1143            ncret = nf90_def_dim(ncid, 'nymaxn', nymaxn, nymaxn_dimid)
1144            call handle_nf90_err(ncret)
1145
1146            WRITE(iounit) nxn(:)
1147            WRITE(iounit) nyn(:)
1148            WRITE(iounit) dxn(:)
1149            WRITE(iounit) dyn(:)
1150            WRITE(iounit) xlon0n(:)
1151            WRITE(iounit) ylat0n(:)
1152
1153            ! Nested, scalar values (for each nest)
1154
1155            dim1dids = (/maxnests_dimid/)
1156
1157            ncret = nf90_def_var(ncid, 'nxn', NF90_INT, &
1158&                                       dim1dids, ncvarid)
1159            call handle_nf90_err(ncret)
1160            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1161&                                        shuffle=0,     &
1162&                                        deflate=1,     &
1163&                                        deflate_level=DEF_LEVEL)
1164            call handle_nf90_err(ncret)
1165            ncret = nf90_put_var(ncid, ncvarid, &
1166&                                nxn(1:maxnests))
1167            call handle_nf90_err(ncret)
1168
1169            ncret = nf90_def_var(ncid, 'nyn', NF90_INT, &
1170&                                       dim1dids, ncvarid)
1171            call handle_nf90_err(ncret)
1172            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1173&                                        shuffle=0,     &
1174&                                        deflate=1,     &
1175&                                        deflate_level=DEF_LEVEL)
1176            call handle_nf90_err(ncret)
1177            ncret = nf90_put_var(ncid, ncvarid, &
1178&                                nyn(1:maxnests))
1179            call handle_nf90_err(ncret)
1180
1181            ncret = nf90_def_var(ncid, 'dxn', NF90_FLOAT, &
1182&                                       dim1dids, ncvarid)
1183            call handle_nf90_err(ncret)
1184            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1185&                                        shuffle=0,     &
1186&                                        deflate=1,     &
1187&                                        deflate_level=DEF_LEVEL)
1188            call handle_nf90_err(ncret)
1189            ncret = nf90_put_var(ncid, ncvarid, &
1190&                                dxn(1:maxnests))
1191            call handle_nf90_err(ncret)
1192
1193            ncret = nf90_def_var(ncid, 'dyn', NF90_FLOAT, &
1194&                                       dim1dids, ncvarid)
1195            call handle_nf90_err(ncret)
1196            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1197&                                        shuffle=0,     &
1198&                                        deflate=1,     &
1199&                                        deflate_level=DEF_LEVEL)
1200            call handle_nf90_err(ncret)
1201            ncret = nf90_put_var(ncid, ncvarid, &
1202&                                dyn(1:maxnests))
1203            call handle_nf90_err(ncret)
1204
1205            ncret = nf90_def_var(ncid, 'xlon0n', NF90_FLOAT, &
1206&                                       dim1dids, ncvarid)
1207            call handle_nf90_err(ncret)
1208            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1209&                                        shuffle=0,     &
1210&                                        deflate=1,     &
1211&                                        deflate_level=DEF_LEVEL)
1212            call handle_nf90_err(ncret)
1213            ncret = nf90_put_var(ncid, ncvarid, &
1214&                                xlon0n(1:maxnests))
1215            call handle_nf90_err(ncret)
1216
1217            ncret = nf90_def_var(ncid, 'ylat0n', NF90_FLOAT, &
1218&                                       dim1dids, ncvarid)
1219            call handle_nf90_err(ncret)
1220            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1221&                                        shuffle=0,     &
1222&                                        deflate=1,     &
1223&                                        deflate_level=DEF_LEVEL)
1224            call handle_nf90_err(ncret)
1225            ncret = nf90_put_var(ncid, ncvarid, &
1226&                                ylat0n(1:maxnests))
1227            call handle_nf90_err(ncret)
1228
1229
1230
1231
1232            ! Nested fields, static over time
1233            WRITE(iounit) oron, excessoron, lsmn, xlandusen
1234
1235            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
1236
1237            ncret = nf90_def_var(ncid, 'oron', NF90_FLOAT, &
1238&                                       dim3dids, ncvarid)
1239            call handle_nf90_err(ncret)
1240            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1241&                                        shuffle=0,     &
1242&                                        deflate=1,     &
1243&                                        deflate_level=DEF_LEVEL)
1244            call handle_nf90_err(ncret)
1245            ncret = nf90_put_var(ncid, ncvarid, &
1246&                                oron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
1247            call handle_nf90_err(ncret)
1248
1249            ncret = nf90_def_var(ncid, 'excessoron', NF90_FLOAT, &
1250&                                       dim3dids, ncvarid)
1251            call handle_nf90_err(ncret)
1252            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1253&                                        shuffle=0,     &
1254&                                        deflate=1,     &
1255&                                        deflate_level=DEF_LEVEL)
1256            call handle_nf90_err(ncret)
1257            ncret = nf90_put_var(ncid, ncvarid, &
1258&                                excessoron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
1259            call handle_nf90_err(ncret)
1260
1261            ncret = nf90_def_var(ncid, 'lsmn', NF90_FLOAT, &
1262&                                       dim3dids, ncvarid)
1263            call handle_nf90_err(ncret)
1264            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1265&                                        shuffle=0,     &
1266&                                        deflate=1,     &
1267&                                        deflate_level=DEF_LEVEL)
1268            call handle_nf90_err(ncret)
1269            ncret = nf90_put_var(ncid, ncvarid, &
1270&                                lsmn(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
1271            call handle_nf90_err(ncret)
1272
1273            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, numclass_dimid, maxnests_dimid/)
1274
1275            ncret = nf90_def_var(ncid, 'xlandusen', NF90_FLOAT, &
1276&                                       dim4dids, ncvarid)
1277            call handle_nf90_err(ncret)
1278            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1279&                                        shuffle=0,     &
1280&                                        deflate=1,     &
1281&                                        deflate_level=DEF_LEVEL)
1282            call handle_nf90_err(ncret)
1283            ncret = nf90_put_var(ncid, ncvarid, &
1284&                                xlandusen(0:nxmaxn-1, 0:nymaxn-1, 1:numclass, 1:maxnests))
1285            call handle_nf90_err(ncret)
1286
1287            PRINT *, 'SUM(oron): ', SUM(oron)
1288
1289
1290
1291            ! 3d nested fields
1292            WRITE(iounit) uun(:,:,:,cm_index,:)
1293            WRITE(iounit) vvn(:,:,:,cm_index,:)
1294            WRITE(iounit) wwn(:,:,:,cm_index,:)
1295            WRITE(iounit) ttn(:,:,:,cm_index,:)
1296            WRITE(iounit) qvn(:,:,:,cm_index,:)
1297            WRITE(iounit) pvn(:,:,:,cm_index,:)
1298            WRITE(iounit) cloudsn(:,:,:,cm_index,:)
1299            WRITE(iounit) cloudsnh(:,:,cm_index,:)
1300            WRITE(iounit) rhon(:,:,:,cm_index,:)
1301            WRITE(iounit) drhodzn(:,:,:,cm_index,:)
1302            WRITE(iounit) tthn(:,:,:,cm_index,:)
1303            WRITE(iounit) qvhn(:,:,:,cm_index,:)
1304
1305
1306            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nzmax_dimid, maxnests_dimid/)
1307
1308            ncret = nf90_def_var(ncid, 'uun', NF90_FLOAT, &
1309&                                       dim4dids, 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&                                uun(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1318            call handle_nf90_err(ncret)
1319
1320            ncret = nf90_def_var(ncid, 'vvn', NF90_FLOAT, &
1321&                                       dim4dids, 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&                                vvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1330            call handle_nf90_err(ncret)
1331
1332            ncret = nf90_def_var(ncid, 'wwn', NF90_FLOAT, &
1333&                                       dim4dids, 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&                                wwn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1342            call handle_nf90_err(ncret)
1343
1344            ncret = nf90_def_var(ncid, 'ttn', NF90_FLOAT, &
1345&                                       dim4dids, 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&                                ttn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1354            call handle_nf90_err(ncret)
1355
1356            ncret = nf90_def_var(ncid, 'qvn', NF90_FLOAT, &
1357&                                       dim4dids, 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&                                qvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1366            call handle_nf90_err(ncret)
1367
1368            ncret = nf90_def_var(ncid, 'pvn', NF90_FLOAT, &
1369&                                       dim4dids, 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&                                pvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1378            call handle_nf90_err(ncret)
1379
1380            ncret = nf90_def_var(ncid, 'rhon', NF90_FLOAT, &
1381&                                       dim4dids, 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&                                rhon(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1390            call handle_nf90_err(ncret)
1391
1392            ncret = nf90_def_var(ncid, 'drhodzn', NF90_FLOAT, &
1393&                                       dim4dids, 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&                                drhodzn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1402            call handle_nf90_err(ncret)
1403
1404
1405            ! Note the new dimensions
1406            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nuvzmax_dimid, maxnests_dimid/)
1407
1408            ncret = nf90_def_var(ncid, 'tthn', NF90_FLOAT, &
1409&                                       dim4dids, ncvarid)
1410            call handle_nf90_err(ncret)
1411            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1412&                                        shuffle=0,     &
1413&                                        deflate=1,     &
1414&                                        deflate_level=DEF_LEVEL)
1415            call handle_nf90_err(ncret)
1416            ncret = nf90_put_var(ncid, ncvarid, &
1417&                                tthn(0:nxmaxn-1, 0:nymaxn-1, 1:nuvzmax, cm_index, 1:maxnests))
1418            call handle_nf90_err(ncret)
1419
1420            ncret = nf90_def_var(ncid, 'qvhn', NF90_FLOAT, &
1421&                                       dim4dids, ncvarid)
1422            call handle_nf90_err(ncret)
1423            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1424&                                        shuffle=0,     &
1425&                                        deflate=1,     &
1426&                                        deflate_level=DEF_LEVEL)
1427            call handle_nf90_err(ncret)
1428            ncret = nf90_put_var(ncid, ncvarid, &
1429&                                qvhn(0:nxmaxn-1, 0:nymaxn-1, 1:nuvzmax, cm_index, 1:maxnests))
1430            call handle_nf90_err(ncret)
1431
1432            ! Note the new dimensions
1433            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, zero_to_nzmax_dimid, maxnests_dimid/)
1434
1435            ncret = nf90_def_var(ncid, 'cloudsn', NF90_INT, &
1436&                                       dim4dids, ncvarid)
1437            call handle_nf90_err(ncret)
1438            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1439&                                        shuffle=0,     &
1440&                                        deflate=1,     &
1441&                                        deflate_level=DEF_LEVEL)
1442            call handle_nf90_err(ncret)
1443            ncret = nf90_put_var(ncid, ncvarid, &
1444&                                cloudsn(0:nxmaxn-1, 0:nymaxn-1, 0:nzmax, cm_index, 1:maxnests))
1445            call handle_nf90_err(ncret)
1446
1447            ! Note the new dimensions
1448            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
1449
1450            ncret = nf90_def_var(ncid, 'cloudsnh', NF90_INT, &
1451&                                       dim3dids, ncvarid)
1452            call handle_nf90_err(ncret)
1453            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1454&                                        shuffle=0,     &
1455&                                        deflate=1,     &
1456&                                        deflate_level=DEF_LEVEL)
1457            call handle_nf90_err(ncret)
1458            ncret = nf90_put_var(ncid, ncvarid, &
1459&                                cloudsnh(0:nxmaxn-1, 0:nymaxn-1, cm_index, 1:maxnests))
1460            call handle_nf90_err(ncret)
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
1471            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
1472            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
1473
1474
1475
1476            ! 2d nested fields
1477            WRITE(iounit) psn(:,:,:,cm_index,:)
1478            WRITE(iounit) sdn(:,:,:,cm_index,:)
1479            WRITE(iounit) msln(:,:,:,cm_index,:)
1480            WRITE(iounit) tccn(:,:,:,cm_index,:)
1481            WRITE(iounit) u10n(:,:,:,cm_index,:)
1482            WRITE(iounit) v10n(:,:,:,cm_index,:)
1483            WRITE(iounit) tt2n(:,:,:,cm_index,:)
1484            WRITE(iounit) td2n(:,:,:,cm_index,:)
1485            WRITE(iounit) lsprecn(:,:,:,cm_index,:)
1486            WRITE(iounit) convprecn(:,:,:,cm_index,:)
1487            WRITE(iounit) sshfn(:,:,:,cm_index,:)
1488            WRITE(iounit) ssrn(:,:,:,cm_index,:)
1489            WRITE(iounit) surfstrn(:,:,:,cm_index,:)
1490            WRITE(iounit) ustarn(:,:,:,cm_index,:)
1491            WRITE(iounit) wstarn(:,:,:,cm_index,:)
1492            WRITE(iounit) hmixn(:,:,:,cm_index,:)
1493            WRITE(iounit) tropopausen(:,:,:,cm_index,:)
1494            WRITE(iounit) olin(:,:,:,cm_index,:)
1495            WRITE(iounit) diffkn(:,:,:,cm_index,:)
1496            WRITE(iounit) vdepn(:,:,:,cm_index,:)
1497
1498            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
1499
1500            ncret = nf90_def_var(ncid, 'psn', 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&                                psn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1510            call handle_nf90_err(ncret)
1511
1512            ncret = nf90_def_var(ncid, 'sdn', 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&                                sdn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1522            call handle_nf90_err(ncret)
1523
1524            ncret = nf90_def_var(ncid, 'msln', NF90_FLOAT, &
1525&                                       dim3dids, ncvarid)
1526            call handle_nf90_err(ncret)
1527            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1528&                                        shuffle=0,     &
1529&                                        deflate=1,     &
1530&                                        deflate_level=DEF_LEVEL)
1531            call handle_nf90_err(ncret)
1532            ncret = nf90_put_var(ncid, ncvarid, &
1533&                                msln(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1534            call handle_nf90_err(ncret)
1535
1536            ncret = nf90_def_var(ncid, 'tccn', NF90_FLOAT, &
1537&                                       dim3dids, ncvarid)
1538            call handle_nf90_err(ncret)
1539            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1540&                                        shuffle=0,     &
1541&                                        deflate=1,     &
1542&                                        deflate_level=DEF_LEVEL)
1543            call handle_nf90_err(ncret)
1544            ncret = nf90_put_var(ncid, ncvarid, &
1545&                                tccn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1546            call handle_nf90_err(ncret)
1547
1548            ncret = nf90_def_var(ncid, 'u10n', NF90_FLOAT, &
1549&                                       dim3dids, ncvarid)
1550            call handle_nf90_err(ncret)
1551            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1552&                                        shuffle=0,     &
1553&                                        deflate=1,     &
1554&                                        deflate_level=DEF_LEVEL)
1555            call handle_nf90_err(ncret)
1556            ncret = nf90_put_var(ncid, ncvarid, &
1557&                                u10n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1558            call handle_nf90_err(ncret)
1559
1560            ncret = nf90_def_var(ncid, 'v10n', NF90_FLOAT, &
1561&                                       dim3dids, ncvarid)
1562            call handle_nf90_err(ncret)
1563            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1564&                                        shuffle=0,     &
1565&                                        deflate=1,     &
1566&                                        deflate_level=DEF_LEVEL)
1567            call handle_nf90_err(ncret)
1568            ncret = nf90_put_var(ncid, ncvarid, &
1569&                                v10n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1570            call handle_nf90_err(ncret)
1571
1572            ncret = nf90_def_var(ncid, 'tt2n', NF90_FLOAT, &
1573&                                       dim3dids, ncvarid)
1574            call handle_nf90_err(ncret)
1575            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1576&                                        shuffle=0,     &
1577&                                        deflate=1,     &
1578&                                        deflate_level=DEF_LEVEL)
1579            call handle_nf90_err(ncret)
1580            ncret = nf90_put_var(ncid, ncvarid, &
1581&                                tt2n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1582            call handle_nf90_err(ncret)
1583
1584            ncret = nf90_def_var(ncid, 'td2n', NF90_FLOAT, &
1585&                                       dim3dids, ncvarid)
1586            call handle_nf90_err(ncret)
1587            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1588&                                        shuffle=0,     &
1589&                                        deflate=1,     &
1590&                                        deflate_level=DEF_LEVEL)
1591            call handle_nf90_err(ncret)
1592            ncret = nf90_put_var(ncid, ncvarid, &
1593&                                td2n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1594            call handle_nf90_err(ncret)
1595
1596            ncret = nf90_def_var(ncid, 'lsprecn', NF90_FLOAT, &
1597&                                       dim3dids, ncvarid)
1598            call handle_nf90_err(ncret)
1599            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1600&                                        shuffle=0,     &
1601&                                        deflate=1,     &
1602&                                        deflate_level=DEF_LEVEL)
1603            call handle_nf90_err(ncret)
1604            ncret = nf90_put_var(ncid, ncvarid, &
1605&                                lsprecn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1606            call handle_nf90_err(ncret)
1607
1608            ncret = nf90_def_var(ncid, 'convprecn', NF90_FLOAT, &
1609&                                       dim3dids, ncvarid)
1610            call handle_nf90_err(ncret)
1611            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1612&                                        shuffle=0,     &
1613&                                        deflate=1,     &
1614&                                        deflate_level=DEF_LEVEL)
1615            call handle_nf90_err(ncret)
1616            ncret = nf90_put_var(ncid, ncvarid, &
1617&                                convprecn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1618            call handle_nf90_err(ncret)
1619
1620            ncret = nf90_def_var(ncid, 'sshfn', NF90_FLOAT, &
1621&                                       dim3dids, ncvarid)
1622            call handle_nf90_err(ncret)
1623            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1624&                                        shuffle=0,     &
1625&                                        deflate=1,     &
1626&                                        deflate_level=DEF_LEVEL)
1627            call handle_nf90_err(ncret)
1628            ncret = nf90_put_var(ncid, ncvarid, &
1629&                                sshfn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1630            call handle_nf90_err(ncret)
1631
1632            ncret = nf90_def_var(ncid, 'ssrn', NF90_FLOAT, &
1633&                                       dim3dids, ncvarid)
1634            call handle_nf90_err(ncret)
1635            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1636&                                        shuffle=0,     &
1637&                                        deflate=1,     &
1638&                                        deflate_level=DEF_LEVEL)
1639            call handle_nf90_err(ncret)
1640            ncret = nf90_put_var(ncid, ncvarid, &
1641&                                ssrn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1642            call handle_nf90_err(ncret)
1643
1644            ncret = nf90_def_var(ncid, 'surfstrn', NF90_FLOAT, &
1645&                                       dim3dids, ncvarid)
1646            call handle_nf90_err(ncret)
1647            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1648&                                        shuffle=0,     &
1649&                                        deflate=1,     &
1650&                                        deflate_level=DEF_LEVEL)
1651            call handle_nf90_err(ncret)
1652            ncret = nf90_put_var(ncid, ncvarid, &
1653&                                surfstrn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1654            call handle_nf90_err(ncret)
1655
1656            ncret = nf90_def_var(ncid, 'ustarn', NF90_FLOAT, &
1657&                                       dim3dids, ncvarid)
1658            call handle_nf90_err(ncret)
1659            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1660&                                        shuffle=0,     &
1661&                                        deflate=1,     &
1662&                                        deflate_level=DEF_LEVEL)
1663            call handle_nf90_err(ncret)
1664            ncret = nf90_put_var(ncid, ncvarid, &
1665&                                ustarn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1666            call handle_nf90_err(ncret)
1667
1668            ncret = nf90_def_var(ncid, 'wstarn', NF90_FLOAT, &
1669&                                       dim3dids, ncvarid)
1670            call handle_nf90_err(ncret)
1671            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1672&                                        shuffle=0,     &
1673&                                        deflate=1,     &
1674&                                        deflate_level=DEF_LEVEL)
1675            call handle_nf90_err(ncret)
1676            ncret = nf90_put_var(ncid, ncvarid, &
1677&                                wstarn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1678            call handle_nf90_err(ncret)
1679
1680            ncret = nf90_def_var(ncid, 'hmixn', NF90_FLOAT, &
1681&                                       dim3dids, ncvarid)
1682            call handle_nf90_err(ncret)
1683            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1684&                                        shuffle=0,     &
1685&                                        deflate=1,     &
1686&                                        deflate_level=DEF_LEVEL)
1687            call handle_nf90_err(ncret)
1688            ncret = nf90_put_var(ncid, ncvarid, &
1689&                                hmixn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1690            call handle_nf90_err(ncret)
1691
1692            ncret = nf90_def_var(ncid, 'tropopausen', NF90_FLOAT, &
1693&                                       dim3dids, ncvarid)
1694            call handle_nf90_err(ncret)
1695            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1696&                                        shuffle=0,     &
1697&                                        deflate=1,     &
1698&                                        deflate_level=DEF_LEVEL)
1699            call handle_nf90_err(ncret)
1700            ncret = nf90_put_var(ncid, ncvarid, &
1701&                                tropopausen(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1702            call handle_nf90_err(ncret)
1703
1704            ncret = nf90_def_var(ncid, 'olin', NF90_FLOAT, &
1705&                                       dim3dids, ncvarid)
1706            call handle_nf90_err(ncret)
1707            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1708&                                        shuffle=0,     &
1709&                                        deflate=1,     &
1710&                                        deflate_level=DEF_LEVEL)
1711            call handle_nf90_err(ncret)
1712            ncret = nf90_put_var(ncid, ncvarid, &
1713&                                olin(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1714            call handle_nf90_err(ncret)
1715
1716            ncret = nf90_def_var(ncid, 'diffkn', NF90_FLOAT, &
1717&                                       dim3dids, ncvarid)
1718            call handle_nf90_err(ncret)
1719            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1720&                                        shuffle=0,     &
1721&                                        deflate=1,     &
1722&                                        deflate_level=DEF_LEVEL)
1723            call handle_nf90_err(ncret)
1724            ncret = nf90_put_var(ncid, ncvarid, &
1725&                                diffkn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1726            call handle_nf90_err(ncret)
1727
1728            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, maxspec_dimid, maxnests_dimid/)
1729
1730
1731
1732            ncret = nf90_def_var(ncid, 'vdepn', NF90_FLOAT, &
1733&                                       dim4dids, ncvarid)
1734            call handle_nf90_err(ncret)
1735            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1736&                                        shuffle=0,     &
1737&                                        deflate=1,     &
1738&                                        deflate_level=DEF_LEVEL)
1739            call handle_nf90_err(ncret)
1740            ncret = nf90_put_var(ncid, ncvarid, &
1741&                                vdepn(0:nxmaxn-1, 0:nymaxn-1, 1:maxspec, cm_index, 1:maxnests))
1742            call handle_nf90_err(ncret)
1743
1744
1745
1746
1747            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
1748            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
1749            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
1750
1751
1752
1753
1754
1755            ! Auxiliary variables for nests
1756            WRITE(iounit) xresoln(:)
1757            WRITE(iounit) yresoln(:)
1758            WRITE(iounit) xln(:)
1759            WRITE(iounit) yln(:)
1760            WRITE(iounit) xrn(:)
1761            WRITE(iounit) yrn(:)
1762
1763            dim1dids = (/zero_to_maxnests_dimid/)
1764
1765            ncret = nf90_def_var(ncid, 'xresoln', NF90_FLOAT, &
1766&                                       dim1dids, ncvarid)
1767            call handle_nf90_err(ncret)
1768            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1769&                                        shuffle=0,     &
1770&                                        deflate=1,     &
1771&                                        deflate_level=DEF_LEVEL)
1772            call handle_nf90_err(ncret)
1773            ncret = nf90_put_var(ncid, ncvarid, &
1774&                                xresoln(0:maxnests))
1775            call handle_nf90_err(ncret)
1776
1777            ncret = nf90_def_var(ncid, 'yresoln', NF90_FLOAT, &
1778&                                       dim1dids, ncvarid)
1779            call handle_nf90_err(ncret)
1780            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1781&                                        shuffle=0,     &
1782&                                        deflate=1,     &
1783&                                        deflate_level=DEF_LEVEL)
1784            call handle_nf90_err(ncret)
1785            ncret = nf90_put_var(ncid, ncvarid, &
1786&                                yresoln(0:maxnests))
1787            call handle_nf90_err(ncret)
1788
1789            dim1dids = (/maxnests_dimid/)
1790
1791            ncret = nf90_def_var(ncid, 'xln', NF90_FLOAT, &
1792&                                       dim1dids, ncvarid)
1793            call handle_nf90_err(ncret)
1794            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1795&                                        shuffle=0,     &
1796&                                        deflate=1,     &
1797&                                        deflate_level=DEF_LEVEL)
1798            call handle_nf90_err(ncret)
1799            ncret = nf90_put_var(ncid, ncvarid, &
1800&                                xln(1:maxnests))
1801            call handle_nf90_err(ncret)
1802
1803            ncret = nf90_def_var(ncid, 'yln', NF90_FLOAT, &
1804&                                       dim1dids, ncvarid)
1805            call handle_nf90_err(ncret)
1806            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1807&                                        shuffle=0,     &
1808&                                        deflate=1,     &
1809&                                        deflate_level=DEF_LEVEL)
1810            call handle_nf90_err(ncret)
1811            ncret = nf90_put_var(ncid, ncvarid, &
1812&                                yln(1:maxnests))
1813            call handle_nf90_err(ncret)
1814
1815            ncret = nf90_def_var(ncid, 'xrn', NF90_FLOAT, &
1816&                                       dim1dids, ncvarid)
1817            call handle_nf90_err(ncret)
1818            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1819&                                        shuffle=0,     &
1820&                                        deflate=1,     &
1821&                                        deflate_level=DEF_LEVEL)
1822            call handle_nf90_err(ncret)
1823            ncret = nf90_put_var(ncid, ncvarid, &
1824&                                xrn(1:maxnests))
1825            call handle_nf90_err(ncret)
1826
1827            ncret = nf90_def_var(ncid, 'yrn', NF90_FLOAT, &
1828&                                       dim1dids, ncvarid)
1829            call handle_nf90_err(ncret)
1830            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1831&                                        shuffle=0,     &
1832&                                        deflate=1,     &
1833&                                        deflate_level=DEF_LEVEL)
1834            call handle_nf90_err(ncret)
1835            ncret = nf90_put_var(ncid, ncvarid, &
1836&                                yrn(1:maxnests))
1837            call handle_nf90_err(ncret)
1838
1839            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
1840            PRINT *, 'SUM(xrn): ', SUM(xrn)
1841
1842
1843
1844            ! Variables for polar stereographic projection
1845            WRITE(iounit) xglobal, sglobal, nglobal
1846            WRITE(iounit) switchnorthg, switchsouthg
1847            WRITE(iounit) southpolemap(:)
1848            WRITE(iounit) northpolemap(:)
1849
1850
1851
1852            dim1dids = (/polemap_dimid/)
1853
1854            ncret = nf90_def_var(ncid, 'southpolemap', NF90_FLOAT, &
1855&                                       dim1dids, ncvarid)
1856            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1857&                                        shuffle=0,     &
1858&                                        deflate=1,     &
1859&                                        deflate_level=DEF_LEVEL)
1860            ncret = nf90_put_var(ncid, ncvarid, &
1861&                                southpolemap(:))
1862
1863            ncret = nf90_def_var(ncid, 'northpolemap', NF90_FLOAT, &
1864&                                       dim1dids, ncvarid)
1865            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1866&                                        shuffle=0,     &
1867&                                        deflate=1,     &
1868&                                        deflate_level=DEF_LEVEL)
1869            ncret = nf90_put_var(ncid, ncvarid, &
1870&                                northpolemap(:))
1871
1872
1873
1874
1875            ncret = nf90_def_var(ncid, 'xglobal', NF90_INT, ncvarid)
1876            call handle_nf90_err(ncret)
1877            ncret = nf90_put_var(ncid, ncvarid, xglobal)
1878            call handle_nf90_err(ncret)
1879
1880            ncret = nf90_def_var(ncid, 'sglobal', NF90_INT, ncvarid)
1881            call handle_nf90_err(ncret)
1882            ncret = nf90_put_var(ncid, ncvarid, sglobal)
1883            call handle_nf90_err(ncret)
1884
1885            ncret = nf90_def_var(ncid, 'nglobal', NF90_INT, ncvarid)
1886            call handle_nf90_err(ncret)
1887            ncret = nf90_put_var(ncid, ncvarid, nglobal)
1888            call handle_nf90_err(ncret)
1889
1890            ncret = nf90_def_var(ncid, 'switchnorthg', NF90_FLOAT, ncvarid)
1891            call handle_nf90_err(ncret)
1892            ncret = nf90_put_var(ncid, ncvarid, switchnorthg)
1893            call handle_nf90_err(ncret)
1894
1895            ncret = nf90_def_var(ncid, 'switchsouthg', NF90_FLOAT, ncvarid)
1896            call handle_nf90_err(ncret)
1897            ncret = nf90_put_var(ncid, ncvarid, switchsouthg)
1898            call handle_nf90_err(ncret)
1899
1900
1901
1902            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
1903            PRINT *, 'xglobal: ', xglobal
1904            PRINT *, 'sglobal: ', sglobal
1905            PRINT *, 'nglobal: ', nglobal
1906            PRINT *, 'switchsouthg: ', switchsouthg
1907
1908            ! Variables declared in conv_mod (convection)
1909            WRITE(iounit) pconv(:)
1910            WRITE(iounit) phconv(:)
1911            WRITE(iounit) dpr(:)
1912            WRITE(iounit) pconv_hpa(:)
1913            WRITE(iounit) phconv_hpa(:)
1914            WRITE(iounit) ft(:)
1915            WRITE(iounit) fq(:)
1916            WRITE(iounit) fmass(:,:)
1917            WRITE(iounit) sub(:)
1918            WRITE(iounit) fmassfrac(:,:)
1919            WRITE(iounit) cbaseflux(:,:)
1920            WRITE(iounit) cbasefluxn(:,:,:)
1921            WRITE(iounit) tconv(:)
1922            WRITE(iounit) qconv(:)
1923            WRITE(iounit) qsconv(:)
1924            WRITE(iounit) psconv, tt2conv, td2conv
1925            WRITE(iounit) nconvlev, nconvtop
1926
1927        ELSE IF (op == 'LOAD') THEN
1928
1929            ! Read the preprocessed format version string and insure it
1930            ! matches this version
1931            READ (iounit) temp_preproc_format_version_str
1932            PRINT *, 'Reading preprocessed file format version: ', &
1933&                    temp_preproc_format_version_str
1934
1935            IF (TRIM(temp_preproc_format_version_str) == &
1936&                                        TRIM(PREPROC_FORMAT_VERSION_STR)) THEN
1937                CONTINUE
1938            ELSE
1939                ! PRINT *, ''  GK: causes relocation truncated to fit: R_X86_64_32
1940                PRINT *, 'Inconsistent preprocessing format version'
1941                PRINT *, 'Expected Version: ', PREPROC_FORMAT_VERSION_STR
1942                PRINT *, 'Detected Version: ', temp_preproc_format_version_str
1943                ! PRINT *, ''
1944                STOP
1945            END IF
1946
1947            ! Read the compiled max dimensions that were dumped from par_mod
1948            ! when creating the fp file, so that we can compare against
1949            ! current FLEXPART dimensions - they need to be the same, or else
1950            ! we abort.
1951            READ (iounit) temp_nxmax, temp_nymax, temp_nzmax, &
1952&                         temp_nuvzmax, temp_nwzmax
1953
1954            ! Get dimensions
1955            ncret = nf90_inq_dimid(ncid, 'nxmax', nxmax_dimid)
1956            call handle_nf90_err(ncret)
1957            ncret = nf90_inquire_dimension(ncid, nxmax_dimid, nxmax_dimname, &
1958&                                                temp_nxmax)
1959            call handle_nf90_err(ncret)
1960            PRINT *, 'temp_nxmax: ', temp_nxmax
1961
1962            ncret = nf90_inq_dimid(ncid, 'nymax', nymax_dimid)
1963            call handle_nf90_err(ncret)
1964            ncret = nf90_inquire_dimension(ncid, nymax_dimid, nymax_dimname, &
1965&                                                temp_nymax)
1966            call handle_nf90_err(ncret)
1967            PRINT *, 'temp_nymax: ', temp_nymax
1968
1969            ncret = nf90_inq_dimid(ncid, 'nzmax', nzmax_dimid)
1970            call handle_nf90_err(ncret)
1971            ncret = nf90_inquire_dimension(ncid, nzmax_dimid, nzmax_dimname, &
1972&                                                temp_nzmax)
1973            call handle_nf90_err(ncret)
1974            PRINT *, 'temp_nzmax: ', temp_nzmax
1975
1976            ncret = nf90_inq_dimid(ncid, 'nuvzmax', nuvzmax_dimid)
1977            call handle_nf90_err(ncret)
1978            ncret = nf90_inquire_dimension(ncid, nuvzmax_dimid, nuvzmax_dimname, &
1979&                                                temp_nuvzmax)
1980            call handle_nf90_err(ncret)
1981            PRINT *, 'temp_nuvzmax: ', temp_nuvzmax
1982
1983            ncret = nf90_inq_dimid(ncid, 'nwzmax', nwzmax_dimid)
1984            call handle_nf90_err(ncret)
1985            ncret = nf90_inquire_dimension(ncid, nwzmax_dimid, nwzmax_dimname, &
1986&                                                temp_nwzmax)
1987            call handle_nf90_err(ncret)
1988            PRINT *, 'temp_nwzmax: ', temp_nwzmax
1989
1990            ncret = nf90_inq_dimid(ncid, 'numclass', numclass_dimid)
1991            call handle_nf90_err(ncret)
1992            ncret = nf90_inquire_dimension(ncid, numclass_dimid, numclass_dimname, &
1993&                                                temp_numclass)
1994            call handle_nf90_err(ncret)
1995            PRINT *, 'temp_numclass: ', temp_numclass
1996
1997            ncret = nf90_inq_dimid(ncid, 'maxspec', maxspec_dimid)
1998            call handle_nf90_err(ncret)
1999            ncret = nf90_inquire_dimension(ncid, maxspec_dimid, maxspec_dimname, &
2000&                                                temp_maxspec)
2001            call handle_nf90_err(ncret)
2002            PRINT *, 'temp_maxspec: ', temp_maxspec
2003
2004
2005
2006            IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. &
2007&                   (temp_nzmax == nzmax) .AND. &
2008&                   (temp_nuvzmax == nuvzmax) .AND. &
2009&                   (temp_nwzmax == nwzmax) .AND. &
2010&                   (temp_numclass == numclass) .AND. &
2011&                   (temp_maxspec == maxspec) ) THEN
2012                CONTINUE
2013            ELSE
2014                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
2015                ! PRINT *, ''
2016                PRINT *, '                  FP file     Compiled FP'
2017                PRINT *, 'nxmax:     ', temp_nxmax, '    ', nxmax
2018                PRINT *, 'nymax:     ', temp_nymax, '    ', nymax
2019                PRINT *, 'nzmax:     ', temp_nzmax, '    ', nzmax
2020                PRINT *, 'nuvzmax:     ', temp_nuvzmax, '    ', nuvzmax
2021                PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax
2022                PRINT *, 'numclass:     ', temp_numclass, '    ', numclass
2023                PRINT *, 'maxspec:     ', temp_maxspec, '    ', maxspec
2024                ! PRINT *, ''
2025                STOP
2026            END IF
2027
2028
2029
2030
2031            ! Scalar values
2032            READ(iounit) nx, ny, nxmin1, nymin1, nxfield
2033            READ(iounit) nuvz, nwz, nz, nmixz, nlev_ec
2034            READ(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
2035
2036
2037
2038            ! Get the varid , then read into scalar variable
2039            ncret = nf90_inq_varid(ncid, 'nx', ncvarid)
2040            call handle_nf90_err(ncret)
2041            ncret = nf90_get_var(ncid, ncvarid, nx)
2042            call handle_nf90_err(ncret)
2043
2044            ncret = nf90_inq_varid(ncid, 'ny', ncvarid)
2045            call handle_nf90_err(ncret)
2046            ncret = nf90_get_var(ncid, ncvarid, ny)
2047            call handle_nf90_err(ncret)
2048
2049            ncret = nf90_inq_varid(ncid, 'nxmin1', ncvarid)
2050            call handle_nf90_err(ncret)
2051            ncret = nf90_get_var(ncid, ncvarid, nxmin1)
2052            call handle_nf90_err(ncret)
2053
2054            ncret = nf90_inq_varid(ncid, 'nymin1', ncvarid)
2055            call handle_nf90_err(ncret)
2056            ncret = nf90_get_var(ncid, ncvarid, nymin1)
2057            call handle_nf90_err(ncret)
2058
2059            ncret = nf90_inq_varid(ncid, 'nxfield', ncvarid)
2060            call handle_nf90_err(ncret)
2061            ncret = nf90_get_var(ncid, ncvarid, nxfield)
2062            call handle_nf90_err(ncret)
2063
2064            ncret = nf90_inq_varid(ncid, 'nuvz', ncvarid)
2065            call handle_nf90_err(ncret)
2066            ncret = nf90_get_var(ncid, ncvarid, nuvz)
2067            call handle_nf90_err(ncret)
2068
2069            ncret = nf90_inq_varid(ncid, 'nwz', ncvarid)
2070            call handle_nf90_err(ncret)
2071            ncret = nf90_get_var(ncid, ncvarid, nwz)
2072            call handle_nf90_err(ncret)
2073
2074            ncret = nf90_inq_varid(ncid, 'nz', ncvarid)
2075            call handle_nf90_err(ncret)
2076            ncret = nf90_get_var(ncid, ncvarid, nz)
2077            call handle_nf90_err(ncret)
2078
2079            ncret = nf90_inq_varid(ncid, 'nmixz', ncvarid)
2080            call handle_nf90_err(ncret)
2081            ncret = nf90_get_var(ncid, ncvarid, nmixz)
2082            call handle_nf90_err(ncret)
2083
2084            ncret = nf90_inq_varid(ncid, 'nlev_ec', ncvarid)
2085            call handle_nf90_err(ncret)
2086            ncret = nf90_get_var(ncid, ncvarid, nlev_ec)
2087            call handle_nf90_err(ncret)
2088
2089            ncret = nf90_inq_varid(ncid, 'dx', ncvarid)
2090            call handle_nf90_err(ncret)
2091            ncret = nf90_get_var(ncid, ncvarid, dx)
2092            call handle_nf90_err(ncret)
2093
2094            ncret = nf90_inq_varid(ncid, 'dy', ncvarid)
2095            call handle_nf90_err(ncret)
2096            ncret = nf90_get_var(ncid, ncvarid, dy)
2097            call handle_nf90_err(ncret)
2098
2099            ncret = nf90_inq_varid(ncid, 'xlon0', ncvarid)
2100            call handle_nf90_err(ncret)
2101            ncret = nf90_get_var(ncid, ncvarid, xlon0)
2102            call handle_nf90_err(ncret)
2103
2104            ncret = nf90_inq_varid(ncid, 'ylat0', ncvarid)
2105            call handle_nf90_err(ncret)
2106            ncret = nf90_get_var(ncid, ncvarid, ylat0)
2107            call handle_nf90_err(ncret)
2108
2109            ncret = nf90_inq_varid(ncid, 'dxconst', ncvarid)
2110            call handle_nf90_err(ncret)
2111            ncret = nf90_get_var(ncid, ncvarid, dxconst)
2112            call handle_nf90_err(ncret)
2113
2114            ncret = nf90_inq_varid(ncid, 'dyconst', ncvarid)
2115            call handle_nf90_err(ncret)
2116            ncret = nf90_get_var(ncid, ncvarid, dyconst)
2117            call handle_nf90_err(ncret)
2118
2119
2120
2121
2122
2123
2124            ! Fixed fields, static in time
2125            READ(iounit) oro, excessoro, lsm, xlanduse, height
2126
2127            ncret = nf90_inq_varid(ncid, 'oro', ncvarid)
2128            call handle_nf90_err(ncret)
2129            ncret = nf90_get_var(ncid, ncvarid, oro(0:nxmax-1,0:nymax-1))
2130            call handle_nf90_err(ncret)
2131
2132            ncret = nf90_inq_varid(ncid, 'excessoro', ncvarid)
2133            call handle_nf90_err(ncret)
2134            ncret = nf90_get_var(ncid, ncvarid, excessoro(0:nxmax-1,0:nymax-1))
2135            call handle_nf90_err(ncret)
2136
2137            ncret = nf90_inq_varid(ncid, 'lsm', ncvarid)
2138            call handle_nf90_err(ncret)
2139            ncret = nf90_get_var(ncid, ncvarid, lsm(0:nxmax-1,0:nymax-1))
2140            call handle_nf90_err(ncret)
2141
2142            ncret = nf90_inq_varid(ncid, 'xlanduse', ncvarid)
2143            call handle_nf90_err(ncret)
2144            ncret = nf90_get_var(ncid, ncvarid, xlanduse(0:nxmax-1,0:nymax-1, 1:numclass))
2145            call handle_nf90_err(ncret)
2146
2147            ncret = nf90_inq_varid(ncid, 'height', ncvarid)
2148            call handle_nf90_err(ncret)
2149            ncret = nf90_get_var(ncid, ncvarid, height(1:nzmax))
2150            call handle_nf90_err(ncret)
2151
2152
2153
2154
2155            ! 3d fields
2156            READ(iounit) uu(:,:,:,cm_index)
2157            READ(iounit) vv(:,:,:,cm_index)
2158            READ(iounit) uupol(:,:,:,cm_index)
2159            READ(iounit) vvpol(:,:,:,cm_index)
2160            READ(iounit) ww(:,:,:,cm_index)
2161            READ(iounit) tt(:,:,:,cm_index)
2162            READ(iounit) qv(:,:,:,cm_index)
2163            READ(iounit) pv(:,:,:,cm_index)
2164            READ(iounit) rho(:,:,:,cm_index)
2165            READ(iounit) drhodz(:,:,:,cm_index)
2166            READ(iounit) tth(:,:,:,cm_index)
2167            READ(iounit) qvh(:,:,:,cm_index)
2168            READ(iounit) pplev(:,:,:,cm_index)
2169            READ(iounit) clouds(:,:,:,cm_index)
2170            READ(iounit) cloudsh(:,:,cm_index)
2171
2172
2173
2174
2175            ! Get the varid and read the variable into the array
2176            ncret = nf90_inq_varid(ncid, 'uu', ncvarid)
2177            call handle_nf90_err(ncret)
2178            ncret = nf90_get_var(ncid, ncvarid, uu(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2179            call handle_nf90_err(ncret)
2180
2181            ncret = nf90_inq_varid(ncid, 'vv', ncvarid)
2182            call handle_nf90_err(ncret)
2183            ncret = nf90_get_var(ncid, ncvarid, vv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2184            call handle_nf90_err(ncret)
2185
2186            ncret = nf90_inq_varid(ncid, 'uupol', ncvarid)
2187            call handle_nf90_err(ncret)
2188            ncret = nf90_get_var(ncid, ncvarid, uupol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2189            call handle_nf90_err(ncret)
2190
2191            ncret = nf90_inq_varid(ncid, 'vvpol', ncvarid)
2192            call handle_nf90_err(ncret)
2193            ncret = nf90_get_var(ncid, ncvarid, vvpol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2194            call handle_nf90_err(ncret)
2195
2196            ncret = nf90_inq_varid(ncid, 'ww', ncvarid)
2197            call handle_nf90_err(ncret)
2198            ncret = nf90_get_var(ncid, ncvarid, ww(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2199            call handle_nf90_err(ncret)
2200
2201            ncret = nf90_inq_varid(ncid, 'tt', ncvarid)
2202            call handle_nf90_err(ncret)
2203            ncret = nf90_get_var(ncid, ncvarid, tt(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2204            call handle_nf90_err(ncret)
2205
2206            ncret = nf90_inq_varid(ncid, 'qv', ncvarid)
2207            call handle_nf90_err(ncret)
2208            ncret = nf90_get_var(ncid, ncvarid, qv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2209            call handle_nf90_err(ncret)
2210
2211            ncret = nf90_inq_varid(ncid, 'pv', ncvarid)
2212            call handle_nf90_err(ncret)
2213            ncret = nf90_get_var(ncid, ncvarid, pv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2214            call handle_nf90_err(ncret)
2215
2216            ncret = nf90_inq_varid(ncid, 'rho', ncvarid)
2217            call handle_nf90_err(ncret)
2218            ncret = nf90_get_var(ncid, ncvarid, rho(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2219            call handle_nf90_err(ncret)
2220
2221            ncret = nf90_inq_varid(ncid, 'drhodz', ncvarid)
2222            call handle_nf90_err(ncret)
2223            ncret = nf90_get_var(ncid, ncvarid, drhodz(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2224            call handle_nf90_err(ncret)
2225
2226            ncret = nf90_inq_varid(ncid, 'clouds', ncvarid)
2227            call handle_nf90_err(ncret)
2228            ncret = nf90_get_var(ncid, ncvarid, clouds(0:nxmax-1,0:nzmax-1,1:nzmax,cm_index))
2229            call handle_nf90_err(ncret)
2230
2231            ncret = nf90_inq_varid(ncid, 'tth', ncvarid)
2232            call handle_nf90_err(ncret)
2233            ncret = nf90_get_var(ncid, ncvarid, tth(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
2234            call handle_nf90_err(ncret)
2235
2236            ncret = nf90_inq_varid(ncid, 'qvh', ncvarid)
2237            call handle_nf90_err(ncret)
2238            ncret = nf90_get_var(ncid, ncvarid, qvh(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
2239            call handle_nf90_err(ncret)
2240
2241            ncret = nf90_inq_varid(ncid, 'pplev', ncvarid)
2242            call handle_nf90_err(ncret)
2243            ncret = nf90_get_var(ncid, ncvarid, pplev(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
2244            call handle_nf90_err(ncret)
2245
2246            ncret = nf90_inq_varid(ncid, 'cloudsh', ncvarid)
2247            call handle_nf90_err(ncret)
2248            ncret = nf90_get_var(ncid, ncvarid, cloudsh(0:nxmax-1,0:nymax-1,cm_index))
2249            call handle_nf90_err(ncret)
2250
2251
2252
2253
2254            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
2255&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
2256
2257
2258            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
2259&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
2260
2261
2262
2263            ! 2d fields
2264            READ(iounit) ps(:,:,:,cm_index)
2265            READ(iounit) sd(:,:,:,cm_index)
2266            READ(iounit) msl(:,:,:,cm_index)
2267            READ(iounit) tcc(:,:,:,cm_index)
2268            READ(iounit) u10(:,:,:,cm_index)
2269            READ(iounit) v10(:,:,:,cm_index)
2270            READ(iounit) tt2(:,:,:,cm_index)
2271            READ(iounit) td2(:,:,:,cm_index)
2272            READ(iounit) lsprec(:,:,:,cm_index)
2273            READ(iounit) convprec(:,:,:,cm_index)
2274            READ(iounit) sshf(:,:,:,cm_index)
2275            READ(iounit) ssr(:,:,:,cm_index)
2276            READ(iounit) surfstr(:,:,:,cm_index)
2277            READ(iounit) ustar(:,:,:,cm_index)
2278            READ(iounit) wstar(:,:,:,cm_index)
2279            READ(iounit) hmix(:,:,:,cm_index)
2280            READ(iounit) tropopause(:,:,:,cm_index)
2281            READ(iounit) oli(:,:,:,cm_index)
2282            READ(iounit) diffk(:,:,:,cm_index)
2283            READ(iounit) vdep(:,:,:,cm_index)
2284
2285            ! Get the varid and read the variable into the array
2286            ncret = nf90_inq_varid(ncid, 'ps', ncvarid)
2287            call handle_nf90_err(ncret)
2288            ncret = nf90_get_var(ncid, ncvarid, ps(0:nxmax-1,0:nymax-1,1,cm_index))
2289            call handle_nf90_err(ncret)
2290
2291            ncret = nf90_inq_varid(ncid, 'sd', ncvarid)
2292            call handle_nf90_err(ncret)
2293            ncret = nf90_get_var(ncid, ncvarid, sd(0:nxmax-1,0:nymax-1,1,cm_index))
2294            call handle_nf90_err(ncret)
2295
2296            ncret = nf90_inq_varid(ncid, 'msl', ncvarid)
2297            call handle_nf90_err(ncret)
2298            ncret = nf90_get_var(ncid, ncvarid, msl(0:nxmax-1,0:nymax-1,1,cm_index))
2299            call handle_nf90_err(ncret)
2300
2301            ncret = nf90_inq_varid(ncid, 'tcc', ncvarid)
2302            call handle_nf90_err(ncret)
2303            ncret = nf90_get_var(ncid, ncvarid, tcc(0:nxmax-1,0:nymax-1,1,cm_index))
2304            call handle_nf90_err(ncret)
2305
2306            ncret = nf90_inq_varid(ncid, 'u10', ncvarid)
2307            call handle_nf90_err(ncret)
2308            ncret = nf90_get_var(ncid, ncvarid, u10(0:nxmax-1,0:nymax-1,1,cm_index))
2309            call handle_nf90_err(ncret)
2310
2311            ncret = nf90_inq_varid(ncid, 'v10', ncvarid)
2312            call handle_nf90_err(ncret)
2313            ncret = nf90_get_var(ncid, ncvarid, v10(0:nxmax-1,0:nymax-1,1,cm_index))
2314            call handle_nf90_err(ncret)
2315
2316            ncret = nf90_inq_varid(ncid, 'tt2', ncvarid)
2317            call handle_nf90_err(ncret)
2318            ncret = nf90_get_var(ncid, ncvarid, tt2(0:nxmax-1,0:nymax-1,1,cm_index))
2319            call handle_nf90_err(ncret)
2320
2321            ncret = nf90_inq_varid(ncid, 'td2', ncvarid)
2322            call handle_nf90_err(ncret)
2323            ncret = nf90_get_var(ncid, ncvarid, td2(0:nxmax-1,0:nymax-1,1,cm_index))
2324            call handle_nf90_err(ncret)
2325
2326            ncret = nf90_inq_varid(ncid, 'lsprec', ncvarid)
2327            call handle_nf90_err(ncret)
2328            ncret = nf90_get_var(ncid, ncvarid, lsprec(0:nxmax-1,0:nymax-1,1,cm_index))
2329            call handle_nf90_err(ncret)
2330
2331            ncret = nf90_inq_varid(ncid, 'convprec', ncvarid)
2332            call handle_nf90_err(ncret)
2333            ncret = nf90_get_var(ncid, ncvarid, convprec(0:nxmax-1,0:nymax-1,1,cm_index))
2334            call handle_nf90_err(ncret)
2335
2336            ncret = nf90_inq_varid(ncid, 'sshf', ncvarid)
2337            call handle_nf90_err(ncret)
2338            ncret = nf90_get_var(ncid, ncvarid, sshf(0:nxmax-1,0:nymax-1,1,cm_index))
2339            call handle_nf90_err(ncret)
2340
2341            ncret = nf90_inq_varid(ncid, 'ssr', ncvarid)
2342            call handle_nf90_err(ncret)
2343            ncret = nf90_get_var(ncid, ncvarid, ssr(0:nxmax-1,0:nymax-1,1,cm_index))
2344            call handle_nf90_err(ncret)
2345
2346            ncret = nf90_inq_varid(ncid, 'surfstr', ncvarid)
2347            call handle_nf90_err(ncret)
2348            ncret = nf90_get_var(ncid, ncvarid, surfstr(0:nxmax-1,0:nymax-1,1,cm_index))
2349            call handle_nf90_err(ncret)
2350
2351            ncret = nf90_inq_varid(ncid, 'ustar', ncvarid)
2352            call handle_nf90_err(ncret)
2353            ncret = nf90_get_var(ncid, ncvarid, ustar(0:nxmax-1,0:nymax-1,1,cm_index))
2354            call handle_nf90_err(ncret)
2355
2356            ncret = nf90_inq_varid(ncid, 'wstar', ncvarid)
2357            call handle_nf90_err(ncret)
2358            ncret = nf90_get_var(ncid, ncvarid, wstar(0:nxmax-1,0:nymax-1,1,cm_index))
2359            call handle_nf90_err(ncret)
2360
2361            ncret = nf90_inq_varid(ncid, 'hmix', ncvarid)
2362            call handle_nf90_err(ncret)
2363            ncret = nf90_get_var(ncid, ncvarid, hmix(0:nxmax-1,0:nymax-1,1,cm_index))
2364            call handle_nf90_err(ncret)
2365
2366            ncret = nf90_inq_varid(ncid, 'tropopause', ncvarid)
2367            call handle_nf90_err(ncret)
2368            ncret = nf90_get_var(ncid, ncvarid, tropopause(0:nxmax-1,0:nymax-1,1,cm_index))
2369            call handle_nf90_err(ncret)
2370
2371            ncret = nf90_inq_varid(ncid, 'oli', ncvarid)
2372            call handle_nf90_err(ncret)
2373            ncret = nf90_get_var(ncid, ncvarid, oli(0:nxmax-1,0:nymax-1,1,cm_index))
2374            call handle_nf90_err(ncret)
2375
2376            ncret = nf90_inq_varid(ncid, 'diffk', ncvarid)
2377            call handle_nf90_err(ncret)
2378            ncret = nf90_get_var(ncid, ncvarid, diffk(0:nxmax-1,0:nymax-1,1,cm_index))
2379            call handle_nf90_err(ncret)
2380
2381
2382
2383
2384            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
2385&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
2386
2387            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
2388&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
2389
2390
2391            ncret = nf90_inq_varid(ncid, 'vdep', ncvarid)
2392            call handle_nf90_err(ncret)
2393            ncret = nf90_get_var(ncid, ncvarid, vdep(0:nxmax-1,0:nymax-1,1:maxspec, cm_index))
2394            call handle_nf90_err(ncret)
2395
2396
2397
2398
2399
2400            ! 1d fields
2401            READ(iounit) z0(:)
2402            READ(iounit) akm(:)
2403            READ(iounit) bkm(:)
2404            READ(iounit) akz(:)
2405            READ(iounit) bkz(:)
2406            READ(iounit) aknew(:)
2407            READ(iounit) bknew(:)
2408
2409
2410            ncret = nf90_inq_varid(ncid, 'z0', ncvarid)
2411            call handle_nf90_err(ncret)
2412            ncret = nf90_get_var(ncid, ncvarid, z0(1:numclass))
2413            call handle_nf90_err(ncret)
2414
2415            ncret = nf90_inq_varid(ncid, 'akm', ncvarid)
2416            call handle_nf90_err(ncret)
2417            ncret = nf90_get_var(ncid, ncvarid, akm(1:nwzmax))
2418            call handle_nf90_err(ncret)
2419
2420            ncret = nf90_inq_varid(ncid, 'bkm', ncvarid)
2421            call handle_nf90_err(ncret)
2422            ncret = nf90_get_var(ncid, ncvarid, bkm(1:nwzmax))
2423            call handle_nf90_err(ncret)
2424
2425            ncret = nf90_inq_varid(ncid, 'akz', ncvarid)
2426            call handle_nf90_err(ncret)
2427            ncret = nf90_get_var(ncid, ncvarid, akz(1:nuvzmax))
2428            call handle_nf90_err(ncret)
2429
2430            ncret = nf90_inq_varid(ncid, 'bkz', ncvarid)
2431            call handle_nf90_err(ncret)
2432            ncret = nf90_get_var(ncid, ncvarid, bkz(1:nuvzmax))
2433            call handle_nf90_err(ncret)
2434
2435            ncret = nf90_inq_varid(ncid, 'aknew', ncvarid)
2436            call handle_nf90_err(ncret)
2437            ncret = nf90_get_var(ncid, ncvarid, aknew(1:nzmax))
2438            call handle_nf90_err(ncret)
2439
2440            ncret = nf90_inq_varid(ncid, 'bknew', ncvarid)
2441            call handle_nf90_err(ncret)
2442            ncret = nf90_get_var(ncid, ncvarid, bknew(1:nzmax))
2443            call handle_nf90_err(ncret)
2444
2445
2446
2447            PRINT *, 'SUM(bknew(1:nzmax)): ', &
2448&                                        SUM(bknew(1:nzmax))
2449
2450
2451
2452
2453            ! Now the nested input grid variables
2454            ! Get the compiled values that were written into the FP file, and
2455            ! make sure they are equal to the current compiled values, to make
2456            ! sure we are working with consistent arrays
2457            ncret = nf90_inq_dimid(ncid, 'maxnests', maxnests_dimid)
2458            call handle_nf90_err(ncret)
2459            ncret = nf90_inquire_dimension(ncid, maxnests_dimid, maxnests_dimname, &
2460&                                                temp_maxnests)
2461            call handle_nf90_err(ncret)
2462            PRINT *, 'temp_maxnests: ', temp_maxnests
2463
2464            ncret = nf90_inq_dimid(ncid, 'nxmaxn', nxmaxn_dimid)
2465            call handle_nf90_err(ncret)
2466            ncret = nf90_inquire_dimension(ncid, nxmaxn_dimid, nxmaxn_dimname, &
2467&                                                temp_nxmaxn)
2468            call handle_nf90_err(ncret)
2469            PRINT *, 'temp_nxmaxn: ', temp_nxmaxn
2470
2471            ncret = nf90_inq_dimid(ncid, 'nymaxn', nymaxn_dimid)
2472            call handle_nf90_err(ncret)
2473            ncret = nf90_inquire_dimension(ncid, nymaxn_dimid, nymaxn_dimname, &
2474&                                                temp_nymaxn)
2475            call handle_nf90_err(ncret)
2476            PRINT *, 'temp_nymaxn: ', temp_nymaxn
2477
2478            ! Note that maxspec_dimid and numclass_dimid were checked above
2479
2480
2481
2482
2483            IF ( (temp_nxmaxn == nxmaxn) .AND. (temp_nymaxn == nymaxn) .AND. &
2484&                   (temp_maxnests == maxnests) ) THEN
2485                CONTINUE
2486            ELSE
2487                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
2488                ! PRINT *, ''
2489                PRINT *, '                  FP file     Compiled FP'
2490                PRINT *, 'nxmaxn:     ', temp_nxmaxn, '    ', nxmaxn
2491                PRINT *, 'nymaxn:     ', temp_nymaxn, '    ', nymaxn
2492                PRINT *, 'maxnests:     ', temp_maxnests, '    ', maxnests
2493                STOP
2494            END IF
2495
2496
2497
2498            ! Nested, scalar values (for each nest)
2499            READ(iounit) nxn(:)
2500            READ(iounit) nyn(:)
2501            READ(iounit) dxn(:)
2502            READ(iounit) dyn(:)
2503            READ(iounit) xlon0n(:)
2504            READ(iounit) ylat0n(:)
2505
2506
2507            ncret = nf90_inq_varid(ncid, 'nxn', ncvarid)
2508            call handle_nf90_err(ncret)
2509            ncret = nf90_get_var(ncid, ncvarid, nxn(1:maxnests))
2510            call handle_nf90_err(ncret)
2511
2512            ncret = nf90_inq_varid(ncid, 'nyn', ncvarid)
2513            call handle_nf90_err(ncret)
2514            ncret = nf90_get_var(ncid, ncvarid, nyn(1:maxnests))
2515            call handle_nf90_err(ncret)
2516
2517            ncret = nf90_inq_varid(ncid, 'dxn', ncvarid)
2518            call handle_nf90_err(ncret)
2519            ncret = nf90_get_var(ncid, ncvarid, dxn(1:maxnests))
2520            call handle_nf90_err(ncret)
2521
2522            ncret = nf90_inq_varid(ncid, 'dyn', ncvarid)
2523            call handle_nf90_err(ncret)
2524            ncret = nf90_get_var(ncid, ncvarid, dyn(1:maxnests))
2525            call handle_nf90_err(ncret)
2526
2527            ncret = nf90_inq_varid(ncid, 'xlon0n', ncvarid)
2528            call handle_nf90_err(ncret)
2529            ncret = nf90_get_var(ncid, ncvarid, xlon0n(1:maxnests))
2530            call handle_nf90_err(ncret)
2531
2532            ncret = nf90_inq_varid(ncid, 'ylat0n', ncvarid)
2533            call handle_nf90_err(ncret)
2534            ncret = nf90_get_var(ncid, ncvarid, ylat0n(1:maxnests))
2535            call handle_nf90_err(ncret)
2536
2537
2538
2539            ! Nested fields, static over time
2540            READ(iounit) oron, excessoron, lsmn, xlandusen
2541
2542            ncret = nf90_inq_varid(ncid, 'oron', ncvarid)
2543            call handle_nf90_err(ncret)
2544            ncret = nf90_get_var(ncid, ncvarid, oron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
2545            call handle_nf90_err(ncret)
2546
2547            ncret = nf90_inq_varid(ncid, 'excessoron', ncvarid)
2548            call handle_nf90_err(ncret)
2549            ncret = nf90_get_var(ncid, ncvarid, excessoron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
2550            call handle_nf90_err(ncret)
2551
2552            ncret = nf90_inq_varid(ncid, 'lsmn', ncvarid)
2553            call handle_nf90_err(ncret)
2554            ncret = nf90_get_var(ncid, ncvarid, lsmn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
2555            call handle_nf90_err(ncret)
2556
2557            ncret = nf90_inq_varid(ncid, 'xlandusen', ncvarid)
2558            call handle_nf90_err(ncret)
2559            ncret = nf90_get_var(ncid, ncvarid, xlandusen(0:nxmaxn-1,0:nymaxn-1,1:numclass,1:maxnests))
2560            call handle_nf90_err(ncret)
2561
2562
2563            PRINT *, 'SUM(oron): ', SUM(oron)
2564
2565
2566
2567
2568            ! 3d nested fields
2569            READ(iounit) uun(:,:,:,cm_index,:)
2570            READ(iounit) vvn(:,:,:,cm_index,:)
2571            READ(iounit) wwn(:,:,:,cm_index,:)
2572            READ(iounit) ttn(:,:,:,cm_index,:)
2573            READ(iounit) qvn(:,:,:,cm_index,:)
2574            READ(iounit) pvn(:,:,:,cm_index,:)
2575            READ(iounit) cloudsn(:,:,:,cm_index,:)
2576            READ(iounit) cloudsnh(:,:,cm_index,:)
2577            READ(iounit) rhon(:,:,:,cm_index,:)
2578            READ(iounit) drhodzn(:,:,:,cm_index,:)
2579            READ(iounit) tthn(:,:,:,cm_index,:)
2580            READ(iounit) qvhn(:,:,:,cm_index,:)
2581
2582
2583            ncret = nf90_inq_varid(ncid, 'uun', ncvarid)
2584            call handle_nf90_err(ncret)
2585            ncret = nf90_get_var(ncid, ncvarid, uun(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2586            call handle_nf90_err(ncret)
2587
2588            ncret = nf90_inq_varid(ncid, 'vvn', ncvarid)
2589            call handle_nf90_err(ncret)
2590            ncret = nf90_get_var(ncid, ncvarid, vvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2591            call handle_nf90_err(ncret)
2592
2593            ncret = nf90_inq_varid(ncid, 'wwn', ncvarid)
2594            call handle_nf90_err(ncret)
2595            ncret = nf90_get_var(ncid, ncvarid, wwn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2596            call handle_nf90_err(ncret)
2597
2598            ncret = nf90_inq_varid(ncid, 'ttn', ncvarid)
2599            call handle_nf90_err(ncret)
2600            ncret = nf90_get_var(ncid, ncvarid, ttn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2601            call handle_nf90_err(ncret)
2602
2603            ncret = nf90_inq_varid(ncid, 'qvn', ncvarid)
2604            call handle_nf90_err(ncret)
2605            ncret = nf90_get_var(ncid, ncvarid, qvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2606            call handle_nf90_err(ncret)
2607
2608            ncret = nf90_inq_varid(ncid, 'pvn', ncvarid)
2609            call handle_nf90_err(ncret)
2610            ncret = nf90_get_var(ncid, ncvarid, pvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2611            call handle_nf90_err(ncret)
2612
2613            ncret = nf90_inq_varid(ncid, 'rhon', ncvarid)
2614            call handle_nf90_err(ncret)
2615            ncret = nf90_get_var(ncid, ncvarid, rhon(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2616            call handle_nf90_err(ncret)
2617
2618            ncret = nf90_inq_varid(ncid, 'drhodzn', ncvarid)
2619            call handle_nf90_err(ncret)
2620            ncret = nf90_get_var(ncid, ncvarid, drhodzn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2621            call handle_nf90_err(ncret)
2622
2623            ncret = nf90_inq_varid(ncid, 'tthn', ncvarid)
2624            call handle_nf90_err(ncret)
2625            ncret = nf90_get_var(ncid, ncvarid, tthn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
2626            call handle_nf90_err(ncret)
2627
2628            ncret = nf90_inq_varid(ncid, 'qvhn', ncvarid)
2629            call handle_nf90_err(ncret)
2630            ncret = nf90_get_var(ncid, ncvarid, qvhn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
2631            call handle_nf90_err(ncret)
2632
2633            ncret = nf90_inq_varid(ncid, 'cloudsn', ncvarid)
2634            call handle_nf90_err(ncret)
2635            ncret = nf90_get_var(ncid, ncvarid, cloudsn(0:nxmaxn-1,0:nymaxn-1,0:nzmax,cm_index,1:maxnests))
2636            call handle_nf90_err(ncret)
2637
2638            ncret = nf90_inq_varid(ncid, 'cloudsnh', ncvarid)
2639            call handle_nf90_err(ncret)
2640            ncret = nf90_get_var(ncid, ncvarid, cloudsnh(0:nxmaxn-1,0:nymaxn-1,cm_index,1:maxnests))
2641            call handle_nf90_err(ncret)
2642
2643
2644
2645
2646            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
2647            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
2648            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
2649
2650
2651
2652
2653            ! 2d nested fields
2654            READ(iounit) psn(:,:,:,cm_index,:)
2655            READ(iounit) sdn(:,:,:,cm_index,:)
2656            READ(iounit) msln(:,:,:,cm_index,:)
2657            READ(iounit) tccn(:,:,:,cm_index,:)
2658            READ(iounit) u10n(:,:,:,cm_index,:)
2659            READ(iounit) v10n(:,:,:,cm_index,:)
2660            READ(iounit) tt2n(:,:,:,cm_index,:)
2661            READ(iounit) td2n(:,:,:,cm_index,:)
2662            READ(iounit) lsprecn(:,:,:,cm_index,:)
2663            READ(iounit) convprecn(:,:,:,cm_index,:)
2664            READ(iounit) sshfn(:,:,:,cm_index,:)
2665            READ(iounit) ssrn(:,:,:,cm_index,:)
2666            READ(iounit) surfstrn(:,:,:,cm_index,:)
2667            READ(iounit) ustarn(:,:,:,cm_index,:)
2668            READ(iounit) wstarn(:,:,:,cm_index,:)
2669            READ(iounit) hmixn(:,:,:,cm_index,:)
2670            READ(iounit) tropopausen(:,:,:,cm_index,:)
2671            READ(iounit) olin(:,:,:,cm_index,:)
2672            READ(iounit) diffkn(:,:,:,cm_index,:)
2673            READ(iounit) vdepn(:,:,:,cm_index,:)
2674
2675            ncret = nf90_inq_varid(ncid, 'psn', ncvarid)
2676            call handle_nf90_err(ncret)
2677            ncret = nf90_get_var(ncid, ncvarid, psn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2678            call handle_nf90_err(ncret)
2679
2680            ncret = nf90_inq_varid(ncid, 'sdn', ncvarid)
2681            call handle_nf90_err(ncret)
2682            ncret = nf90_get_var(ncid, ncvarid, sdn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2683            call handle_nf90_err(ncret)
2684
2685            ncret = nf90_inq_varid(ncid, 'msln', ncvarid)
2686            call handle_nf90_err(ncret)
2687            ncret = nf90_get_var(ncid, ncvarid, msln(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2688            call handle_nf90_err(ncret)
2689
2690            ncret = nf90_inq_varid(ncid, 'tccn', ncvarid)
2691            call handle_nf90_err(ncret)
2692            ncret = nf90_get_var(ncid, ncvarid, tccn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2693            call handle_nf90_err(ncret)
2694
2695            ncret = nf90_inq_varid(ncid, 'u10n', ncvarid)
2696            call handle_nf90_err(ncret)
2697            ncret = nf90_get_var(ncid, ncvarid, u10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2698            call handle_nf90_err(ncret)
2699
2700            ncret = nf90_inq_varid(ncid, 'v10n', ncvarid)
2701            call handle_nf90_err(ncret)
2702            ncret = nf90_get_var(ncid, ncvarid, v10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2703            call handle_nf90_err(ncret)
2704
2705            ncret = nf90_inq_varid(ncid, 'tt2n', ncvarid)
2706            call handle_nf90_err(ncret)
2707            ncret = nf90_get_var(ncid, ncvarid, tt2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2708            call handle_nf90_err(ncret)
2709
2710            ncret = nf90_inq_varid(ncid, 'td2n', ncvarid)
2711            call handle_nf90_err(ncret)
2712            ncret = nf90_get_var(ncid, ncvarid, td2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2713            call handle_nf90_err(ncret)
2714
2715            ncret = nf90_inq_varid(ncid, 'lsprecn', ncvarid)
2716            call handle_nf90_err(ncret)
2717            ncret = nf90_get_var(ncid, ncvarid, lsprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2718            call handle_nf90_err(ncret)
2719
2720            ncret = nf90_inq_varid(ncid, 'convprecn', ncvarid)
2721            call handle_nf90_err(ncret)
2722            ncret = nf90_get_var(ncid, ncvarid, convprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2723            call handle_nf90_err(ncret)
2724
2725            ncret = nf90_inq_varid(ncid, 'sshfn', ncvarid)
2726            call handle_nf90_err(ncret)
2727            ncret = nf90_get_var(ncid, ncvarid, sshfn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2728            call handle_nf90_err(ncret)
2729
2730            ncret = nf90_inq_varid(ncid, 'ssrn', ncvarid)
2731            call handle_nf90_err(ncret)
2732            ncret = nf90_get_var(ncid, ncvarid, ssrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2733            call handle_nf90_err(ncret)
2734
2735            ncret = nf90_inq_varid(ncid, 'surfstrn', ncvarid)
2736            call handle_nf90_err(ncret)
2737            ncret = nf90_get_var(ncid, ncvarid, surfstrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2738            call handle_nf90_err(ncret)
2739
2740            ncret = nf90_inq_varid(ncid, 'ustarn', ncvarid)
2741            call handle_nf90_err(ncret)
2742            ncret = nf90_get_var(ncid, ncvarid, ustarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2743            call handle_nf90_err(ncret)
2744
2745            ncret = nf90_inq_varid(ncid, 'wstarn', ncvarid)
2746            call handle_nf90_err(ncret)
2747            ncret = nf90_get_var(ncid, ncvarid, wstarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2748            call handle_nf90_err(ncret)
2749
2750            ncret = nf90_inq_varid(ncid, 'hmixn', ncvarid)
2751            call handle_nf90_err(ncret)
2752            ncret = nf90_get_var(ncid, ncvarid, hmixn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2753            call handle_nf90_err(ncret)
2754
2755            ncret = nf90_inq_varid(ncid, 'tropopausen', ncvarid)
2756            call handle_nf90_err(ncret)
2757            ncret = nf90_get_var(ncid, ncvarid, tropopausen(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2758            call handle_nf90_err(ncret)
2759
2760            ncret = nf90_inq_varid(ncid, 'olin', ncvarid)
2761            call handle_nf90_err(ncret)
2762            ncret = nf90_get_var(ncid, ncvarid, olin(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2763            call handle_nf90_err(ncret)
2764
2765            ncret = nf90_inq_varid(ncid, 'diffkn', ncvarid)
2766            call handle_nf90_err(ncret)
2767            ncret = nf90_get_var(ncid, ncvarid, diffkn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2768            call handle_nf90_err(ncret)
2769
2770            ncret = nf90_inq_varid(ncid, 'vdepn', ncvarid)
2771            call handle_nf90_err(ncret)
2772            ncret = nf90_get_var(ncid, ncvarid, vdepn(0:nxmaxn-1,0:nymaxn-1,1:maxspec,cm_index,1:maxnests))
2773            call handle_nf90_err(ncret)
2774
2775
2776
2777
2778            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
2779            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
2780            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
2781
2782
2783
2784            ! Auxiliary variables for nests
2785            READ(iounit) xresoln(:)
2786            READ(iounit) yresoln(:)
2787            READ(iounit) xln(:)
2788            READ(iounit) yln(:)
2789            READ(iounit) xrn(:)
2790            READ(iounit) yrn(:)
2791
2792            ncret = nf90_inq_varid(ncid, 'xresoln', ncvarid)
2793            call handle_nf90_err(ncret)
2794            ncret = nf90_get_var(ncid, ncvarid, xresoln(0:maxnests))
2795            call handle_nf90_err(ncret)
2796
2797            ncret = nf90_inq_varid(ncid, 'yresoln', ncvarid)
2798            call handle_nf90_err(ncret)
2799            ncret = nf90_get_var(ncid, ncvarid, yresoln(0:maxnests))
2800            call handle_nf90_err(ncret)
2801
2802            ncret = nf90_inq_varid(ncid, 'xln', ncvarid)
2803            call handle_nf90_err(ncret)
2804            ncret = nf90_get_var(ncid, ncvarid, xln(1:maxnests))
2805            call handle_nf90_err(ncret)
2806
2807            ncret = nf90_inq_varid(ncid, 'yln', ncvarid)
2808            call handle_nf90_err(ncret)
2809            ncret = nf90_get_var(ncid, ncvarid, yln(1:maxnests))
2810            call handle_nf90_err(ncret)
2811
2812            ncret = nf90_inq_varid(ncid, 'xrn', ncvarid)
2813            call handle_nf90_err(ncret)
2814            ncret = nf90_get_var(ncid, ncvarid, xrn(1:maxnests))
2815            call handle_nf90_err(ncret)
2816
2817            ncret = nf90_inq_varid(ncid, 'yrn', ncvarid)
2818            call handle_nf90_err(ncret)
2819            ncret = nf90_get_var(ncid, ncvarid, yrn(1:maxnests))
2820            call handle_nf90_err(ncret)
2821
2822
2823
2824            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
2825            PRINT *, 'SUM(xrn): ', SUM(xrn)
2826
2827
2828
2829            ! Variables for polar stereographic projection
2830            READ(iounit) xglobal, sglobal, nglobal
2831            READ(iounit) switchnorthg, switchsouthg
2832            READ(iounit) southpolemap(:)
2833            READ(iounit) northpolemap(:)
2834
2835
2836            ncret = nf90_inq_varid(ncid, 'southpolemap', ncvarid)
2837            call handle_nf90_err(ncret)
2838            ncret = nf90_get_var(ncid, ncvarid, southpolemap(:))
2839            call handle_nf90_err(ncret)
2840
2841            ncret = nf90_inq_varid(ncid, 'northpolemap', ncvarid)
2842            call handle_nf90_err(ncret)
2843            ncret = nf90_get_var(ncid, ncvarid, northpolemap(:))
2844            call handle_nf90_err(ncret)
2845
2846            ncret = nf90_inq_varid(ncid, 'xglobal', ncvarid)
2847            call handle_nf90_err(ncret)
2848            ncret = nf90_get_var(ncid, ncvarid, xglobal)
2849            call handle_nf90_err(ncret)
2850
2851            ncret = nf90_inq_varid(ncid, 'sglobal', ncvarid)
2852            call handle_nf90_err(ncret)
2853            ncret = nf90_get_var(ncid, ncvarid, sglobal)
2854            call handle_nf90_err(ncret)
2855
2856            ncret = nf90_inq_varid(ncid, 'nglobal', ncvarid)
2857            call handle_nf90_err(ncret)
2858            ncret = nf90_get_var(ncid, ncvarid, nglobal)
2859            call handle_nf90_err(ncret)
2860
2861            ncret = nf90_inq_varid(ncid, 'switchnorthg', ncvarid)
2862            call handle_nf90_err(ncret)
2863            ncret = nf90_get_var(ncid, ncvarid, switchnorthg)
2864            call handle_nf90_err(ncret)
2865
2866            ncret = nf90_inq_varid(ncid, 'switchsouthg', ncvarid)
2867            call handle_nf90_err(ncret)
2868            ncret = nf90_get_var(ncid, ncvarid, switchsouthg)
2869            call handle_nf90_err(ncret)
2870
2871
2872            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
2873            PRINT *, 'xglobal: ', xglobal
2874            PRINT *, 'sglobal: ', sglobal
2875            PRINT *, 'nglobal: ', nglobal
2876            PRINT *, 'switchsouthg: ', switchsouthg
2877
2878
2879
2880
2881            ! Variables declared in conv_mod (convection)
2882            READ(iounit) pconv(:)
2883            READ(iounit) phconv(:)
2884            READ(iounit) dpr(:)
2885            READ(iounit) pconv_hpa(:)
2886            READ(iounit) phconv_hpa(:)
2887            READ(iounit) ft(:)
2888            READ(iounit) fq(:)
2889            READ(iounit) fmass(:,:)
2890            READ(iounit) sub(:)
2891            READ(iounit) fmassfrac(:,:)
2892            READ(iounit) cbaseflux(:,:)
2893            READ(iounit) cbasefluxn(:,:,:)
2894            READ(iounit) tconv(:)
2895            READ(iounit) qconv(:)
2896            READ(iounit) qsconv(:)
2897            READ(iounit) psconv, tt2conv, td2conv
2898            READ(iounit) nconvlev, nconvtop
2899
2900        ELSE
2901            STOP 'fpio(): Illegal operation'
2902           
2903        ENDIF
2904    END SUBROUTINE fpio
2905
2906    SUBROUTINE fpmetbinary_filetext(filename, cm_index)
2907
2908        ! This is a utility subroutine meant to be used for testing purposes.
2909        ! It facilitates the text output of variables read in from the
2910        ! specified .fp file.  This routine will easily cause the program
2911        ! to crash due memory allocation issues, particularly when you are
2912        ! trying to text print 3d arrays in a single formatted statetment.
2913       
2914        CHARACTER(LEN=*), INTENT(IN) :: filename
2915        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
2916                                                  ! most com_mod variables.
2917                                                  ! Should be 1 or 2
2918
2919        !OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', status='REPLACE', &
2920        !    form="formatted", access="stream")
2921        OPEN(IOUNIT_TEXTOUT, file=filename, action='WRITE', &
2922             form="formatted", access="APPEND")
2923
2924        WRITE(IOUNIT_TEXTOUT, *) 'oro: ', oro
2925        WRITE(IOUNIT_TEXTOUT, *) 'excessoro: ', excessoro
2926        WRITE(IOUNIT_TEXTOUT, *) 'lsm: ', lsm
2927        WRITE(IOUNIT_TEXTOUT, *) 'xlanduse: ', xlanduse
2928        WRITE(IOUNIT_TEXTOUT, *) 'height: ', height
2929
2930        WRITE(IOUNIT_TEXTOUT, *) 'uu: ', uu(:,:,:,cm_index)
2931        WRITE(IOUNIT_TEXTOUT, *) 'vv: ', vv(:,:,:,cm_index)
2932        WRITE(IOUNIT_TEXTOUT, *) 'uupol: ', uupol(:,:,:,cm_index)
2933        WRITE(IOUNIT_TEXTOUT, *) 'vvpol: ', vvpol(:,:,:,cm_index)
2934        WRITE(IOUNIT_TEXTOUT, *) 'ww: ', ww(:,:,:,cm_index)
2935        WRITE(IOUNIT_TEXTOUT, *) 'tt: ', tt(:,:,:,cm_index)
2936        WRITE(IOUNIT_TEXTOUT, *) 'qv: ', qv(:,:,:,cm_index)
2937        WRITE(IOUNIT_TEXTOUT, *) 'pv: ', pv(:,:,:,cm_index)
2938        WRITE(IOUNIT_TEXTOUT, *) 'rho: ', rho(:,:,:,cm_index)
2939        WRITE(IOUNIT_TEXTOUT, *) 'drhodz: ', drhodz(:,:,:,cm_index)
2940        WRITE(IOUNIT_TEXTOUT, *) 'tth: ', tth(:,:,:,cm_index)
2941        WRITE(IOUNIT_TEXTOUT, *) 'qvh: ', qvh(:,:,:,cm_index)
2942        WRITE(IOUNIT_TEXTOUT, *) 'pplev: ', pplev(:,:,:,cm_index)
2943        WRITE(IOUNIT_TEXTOUT, *) 'clouds: ', clouds(:,:,:,cm_index)
2944        WRITE(IOUNIT_TEXTOUT, *) 'cloudsh: ', cloudsh(:,:,cm_index)
2945
2946
2947
2948
2949        CLOSE(IOUNIT_TEXTOUT)
2950    END SUBROUTINE fpmetbinary_filetext
2951
2952    subroutine handle_nf90_err(status)
2953
2954        ! Custom routine for checking NF90 error status
2955        ! and aborting if necessary
2956        use netcdf
2957        implicit none
2958        integer, intent (in) :: status
2959
2960        if (status /= nf90_noerr) then
2961            print *, trim(nf90_strerror(status))
2962            stop "Stopped..."
2963        endif
2964    end subroutine handle_nf90_err
2965
2966
2967
2968
2969END MODULE fpmetbinary_mod
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG