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

FPv9.3.2grib2nc4_repair
Last change on this file since fd86dea was fd86dea, checked in by Don Morton <Don.Morton@…>, 7 years ago

Prepared what I hope to be a stable FPv9.3.2 for CTBTO testing

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