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

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

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

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